Ответить
09.02.2014, 15:32
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,044
Поблагодарили 878 раз(а) / Репутация: 864
Проблема в том, что мой тупой советник очень сильно зависит от ДЦ и если я исправлю(или не исправлю) советник, то могу сильно угореть на бабло
09.02.2014, 15:32
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Да! И если метаквоты правы, то вы знаете, от какого ДЦ эта папка, да?
Я вот и не знаю. Помогите!
В папке лежит origin.txt

Последний раз редактировалось NSerega; 09.02.2014 в 16:37.
09.02.2014, 15:35
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,044
Поблагодарили 878 раз(а) / Репутация: 864
В папке лежит origin.txt
Это я заметил!
Только этот файл сам не открывается даже при входе в папку.

Последний раз редактировалось NSerega; 09.02.2014 в 16:39.
09.02.2014, 15:37
Аватар для ShadowCandle
ShadowCandle ShadowCandle на форуме Разрушитель Граалей :)
Регистрация: 22.04.2012 / Адрес: Россия / Сообщений: 2,066
Поблагодарили 2,470 раз(а) / Репутация: 2468
Врать нехорошо!
Ничего похожего нет и не было никогда! Если приложение называется "Уродыинста", то и папка будет называться в "документс энд сеттингз" как "уродыинста", не не как в вышеприведенном примере!
Вот это:
2E6A005861382433BE12963DE9029B61
Придумали идиоты метаквоты.
Попробуйте доказать обратное
А вам не кажется, что вы сами нарываетесь на такое отношение, я вам говорю как есть, а вы меня просите что-то вам доказывать? Я обязан это делать? Я вам пытаюсь помочь прояснить ситуацию, а вы меня начинаете проверять на правду?
С таким отношением флаг вам в руки...
Никогда не спорьте с идиотами. Вы опуститесь до их уровня, где они задавят вас своим опытом (С) Марк Твен

Последний раз редактировалось NSerega; 09.02.2014 в 16:38.
09.02.2014, 15:39
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,044
Поблагодарили 878 раз(а) / Репутация: 864
Вообще, борьба с исходниками выглядит уныло. Когда-нибудь этот позор уйдет с лица Земли, возможно, вместе с человечеством.
Например, если я не хочу, чтобы мой бутерброд съели, то я его не буду выкладывать в коридоре. Таким образом, у меня его(бутерброд) можно только забрать с уголовно наказуемыми деяниями, например, морду набить.
09.02.2014, 16:57
Аватар для hmpr
hmpr hmpr вне форума Прохожий
Регистрация: 02.10.2012 / Сообщений: 2
Поблагодарили 0 раз(а) / Репутация: 1
Здравствуйте. Помогите решить такую задачу: при написании индикатора необходимо, чтобы он прибавлял значение индикатора нулевого бара (например столбец MACD) к значению индикатора 1-го, 1-го к 2-го и т.д. Как это можно реализовать? Уже неделю бьюсь безрезультатно. Помогите пожалуйста.
09.02.2014, 17:49
Аватар для Dom
Dom Dom вне форума
Регистрация: 09.03.2009 / Сообщений: 1,033
Поблагодарили 2,482 раз(а) / Репутация: 2481
Подскажите пожалуйста, кто знает, как понять строку arrays passed by reference only(массивы передаются только по ссылке).Это после компиляции советника в новом билде.
09.02.2014, 17:56
Регистрация: 13.03.2009 / Сообщений: 2,366
Поблагодарили 1,968 раз(а) / Репутация: 2045
Здравствуйте. Помогите решить такую задачу: при написании индикатора необходимо, чтобы он прибавлял значение индикатора нулевого бара (например столбец MACD) к значению индикатора 1-го, 1-го к 2-го и т.д. Как это можно реализовать? Уже неделю бьюсь безрезультатно. Помогите пожалуйста.
Так как 0 бар меняется, придётся пересчитывать все бары что бы они то же менялись.
Значит меняем limit=Bars-counted_bars; на limit=Bars;

В MACD быры перебираются от 0. Значит при расчёте всех остальных баров, значение 0 уже посчитано, нужно просто прибавить.
Вместо
Код:
for(int i=0; i<limit; i++)
      MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
делаем
Код:
for(int i=0; i<limit; i++)
{     MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
if(i>0)MacdBuffer[i]=MacdBuffer[i]+MacdBuffer[0];
}
Как то так.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
09.02.2014, 18:04
Регистрация: 13.03.2009 / Сообщений: 2,366
Поблагодарили 1,968 раз(а) / Репутация: 2045
Подскажите пожалуйста, кто знает, как понять строку arrays passed by reference only(массивы передаются только по ссылке).Это после компиляции советника в новом билде.
Должно работать и так. Если раздражает, можно поставить & перед именем массива в той строке.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Dom , R2911 
09.02.2014, 18:32
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
Здравствуйте. Помогите решить такую задачу: при написании индикатора необходимо, чтобы он прибавлял значение индикатора нулевого бара (например столбец MACD) к значению индикатора 1-го, 1-го к 2-го и т.д. Как это можно реализовать? Уже неделю бьюсь безрезультатно. Помогите пожалуйста.
Так как 0 бар меняется, придётся пересчитывать все бары что бы они то же менялись.
Значит меняем limit=Bars-counted_bars; на limit=Bars;

В MACD быры перебираются от 0. Значит при расчёте всех остальных баров, значение 0 уже посчитано, нужно просто прибавить.
Вместо
Код:
for(int i=0; i<limit; i++)
      MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
делаем
Код:
for(int i=0; i<limit; i++)
{     MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
if(i>0)MacdBuffer[i]=MacdBuffer[i]+MacdBuffer[0];
}
Как то так.
Андрей, ты наверное сегодня чуток перебрал, или я ничего не понял из твоего кода. Зачем такие нагрузки на комп?
Почему не использовать дополнительный буфер IndicatorBuffers(3); где #property indicator_buffers 2 (для MACD) и в него писать сумму показаний нулевого и первого баров. Дальше эти значения можно использовать для расчётов.
А дальше по необходимости, если надо эти показания рисовать, то можно добавить #property indicator_buffers 3 и эти значения будут отображаться.
Ugar 
09.02.2014, 19:02
Аватар для Dom
Dom Dom вне форума
Регистрация: 09.03.2009 / Сообщений: 1,033
Поблагодарили 2,482 раз(а) / Репутация: 2481
Должно работать и так. Если раздражает, можно поставить & перед именем массива в той строке.
Понял, спасибо.
09.02.2014, 19:04
Аватар для secotr
secotr secotr вне форума Прохожий
Регистрация: 09.02.2014 / Сообщений: 2
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Помогите плиз! Перестала работать функция FileWriteArray... в файл записывает без данных ((( После обновления работа с файлами не корректная...
Код:
void OnTimer()
  {
//---
      int total = OrdersTotal();
      ArrayResize(orders_arr, total);
      
      for(int i=0; i<total; i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
            orders_arr[i].num_account = AccountNumber();
            orders_arr[i].num_order = OrderTicket();
            orders_arr[i].symbol = OrderSymbol();
            orders_arr[i].order_type = OrderType();
         }
         Print(orders_arr[i].num_account," ",orders_arr[i].num_order," ",orders_arr[i].symbol," ",orders_arr[i].order_type);
      }
      
      ResetLastError();
      int handle=FileOpen(FileName,FILE_WRITE|FILE_BIN);
      if(handle!=INVALID_HANDLE)
      {
         FileSeek(handle,0,SEEK_SET);
         FileWriteArray(handle,orders_arr,0,WHOLE_ARRAY);
         FileClose(handle);
      }
      else Print("Failed to open the file, error ",GetLastError());
      
   
  }
Может я конечно где-то туплю...
Ugar 
09.02.2014, 19:06
Регистрация: 13.03.2009 / Сообщений: 2,366
Поблагодарили 1,968 раз(а) / Репутация: 2045
Андрей, ты наверное сегодня чуток перебрал, или я ничего не понял из твоего кода. Зачем такие нагрузки на комп?
Почему не использовать дополнительный буфер IndicatorBuffers(3); где #property indicator_buffers 2 (для MACD) и в него писать сумму показаний нулевого и первого баров. Дальше эти значения можно использовать для расчётов.
А дальше по необходимости, если надо эти показания рисовать, то можно добавить #property indicator_buffers 3 и эти значения будут отображаться.
Мой вариант проще в реализации. Если человек задаёт вопросы, думаю ему это немаловажно.
Твой вариант конечно экономнее по ресурсам компа. Хотя и в этом варианте можно ограничить длину буфера, для ещё большей экономии.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
09.02.2014, 20:45
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
Помогите плиз! Перестала работать функция FileWriteArray... в файл записывает без данных ((( После обновления работа с файлами не корректная...

Скрытый текст

Код:
void OnTimer()
  {
//---
      int total = OrdersTotal();
      ArrayResize(orders_arr, total);
      
      for(int i=0; i<total; i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
            orders_arr[i].num_account = AccountNumber();
            orders_arr[i].num_order = OrderTicket();
            orders_arr[i].symbol = OrderSymbol();
            orders_arr[i].order_type = OrderType();
         }
         Print(orders_arr[i].num_account," ",orders_arr[i].num_order," ",orders_arr[i].symbol," ",orders_arr[i].order_type);
      }
      
      ResetLastError();
      int handle=FileOpen(FileName,FILE_WRITE|FILE_BIN);
      if(handle!=INVALID_HANDLE)
      {
         FileSeek(handle,0,SEEK_SET);
         FileWriteArray(handle,orders_arr,0,WHOLE_ARRAY);
         FileClose(handle);
      }
      else Print("Failed to open the file, error ",GetLastError());
      
   
  }
[свернуть]
Может я конечно где-то туплю...
Обрати внимание на
Цитата:
раньше файлы всегда открывались в режиме FILE_SHARE_READ, FILE_SHARE_WRITE, теперь желательный режим открытия нужно указывать явно.
Это из справки. Может в этом проблема? Пока я не касался этого. Советник в котором есть запись в файл работает ещё на 509 билде. Сегодня тоже запустился без обновления. Теперь до следующих выходных будет жить в 509.
09.02.2014, 21:16
Аватар для secotr
secotr secotr вне форума Прохожий
Регистрация: 09.02.2014 / Сообщений: 2
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Обрати внимание на
Это из справки. Может в этом проблема? Пока я не касался этого. Советник в котором есть запись в файл работает ещё на 509 билде. Сегодня тоже запустился без обновления. Теперь до следующих выходных будет жить в 509.
Увы... Если с FILE_WRITE файл записывается, хотя и пустой, то с FILE_SHARE_WRITE вообще никакой реакции... причем handle нормальный! Так же проблема если вместо массива писать построчно с FILE_TXT, вообще не открывается и выдает 5004 ошибку... Пипец они накрутили...
10.02.2014, 06:28
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
Увы... Если с FILE_WRITE файл записывается, хотя и пустой, то с FILE_SHARE_WRITE вообще никакой реакции... причем handle нормальный! Так же проблема если вместо массива писать построчно с FILE_TXT, вообще не открывается и выдает 5004 ошибку... Пипец они накрутили...
Нам обоим стоит быть повнимательней. Из справки
Цитата:
Записывает в файл типа BIN массивы любых типов, кроме строковых (может быть массив структур, не содержащих строки и динамические массивы).
В твоём массиве orders_arr[i].symbol = OrderSymbol();
А FILE_SHARE_WRITE мне кажется используется совместно с FILE_WRITE в комбинации флагов. Но учитывая наши потребности вряд-ли будет необходимость совместного использования файла.

Последний раз редактировалось AlexeyVik; 10.02.2014 в 06:32.
secotr , Ugar 
10.02.2014, 07:44
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,032 раз(а) / Репутация: 9032
  • Отправить сообщение для eevviill с помощью Skype™
Подскажите пожалуйста, кто знает, как понять строку arrays passed by reference only(массивы передаются только по ссылке).Это после компиляции советника в новом билде.
Сам начал разбиратся. Еле накопал информацию и казалось уже понял. Но тут наткнулся на пример с журнала fortrader. Хороший пример. Но правильный на 95 или 100%.

Скрытый текст

Передача параметров в функцию по ссылке (по адресу)
Эта вещь прекрасно известна программистам на любом из универсальных языков программирования,
например, на C, а ещё более на C++. Напишем самый простейший советник
(файл t2.mq4 — здесь и далее имена тестовых примеров в прилагаемом архиве), и поместим его на
график любой валютной пары:
PHP код:
int start() {
static 
int nTick 0;
IncnTick );
Alert«новый тик № » nTick );
}
//—————————————
void Incint n ) { n++; } 
Результатом выполнения будет непрерывное повторение одного и того же результата: «новый тик №0»… Переданное в функцию значение n изменяется там, но это не производит
никакого влияния на внешнее окружение функции (вызвавшую функцию
start()) — в функцию передаётся копия переменной nTick, так обычно работает вызов функций в MQL4.
PHP код:
Добавим один символ (&) в описание функции Inc() :
void Incint) { n++; }
Выполнение советника радикально изменится:
новый тик № 1
новый тик № 2
новый тик № 3
… 
Значок & указал, что в функцию нужно передать не копию, а оригинал переменной nTick, и все изменения, проделанные над этой переменной внутри функции, будут отражаться
на значении этой переменной снаружи функции. Такое
поведение называют побочный эффект функции.
[свернуть]

Мне кажется что в первом варианте не
будет алерт выдавать постоянно новый тик 0. Или будет?

Всё. Понял.
Если в функции написать nTick++; то будет увеличиватся значение в алерте. А так просто поработали с данными передаными и не изменили сами данные. Если надо менять сами данные которые передаются то перед вводной переменной в функции надо ставить &

Последний раз редактировалось eevviill; 10.02.2014 в 07:56.
Dom 
10.02.2014, 08:05
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
Сам начал разбиратся. Еле накопал информацию и казалось уже понял. Но тут наткнулся на пример с журнала fortrader. Хороший пример. Но правильный на 95 или 100%.

Скрытый текст

Передача параметров в функцию по ссылке (по адресу)
Эта вещь прекрасно известна программистам на любом из универсальных языков программирования,
например, на C, а ещё более на C++. Напишем самый простейший советник
(файл t2.mq4 — здесь и далее имена тестовых примеров в прилагаемом архиве), и поместим его на
график любой валютной пары:
PHP код:
int start() {
static 
int nTick 0;
IncnTick );
Alert«новый тик № » nTick );
}
//—————————————
void Incint n ) { n++; } 
Результатом выполнения будет непрерывное повторение одного и того же результата: «новый тик №0»… Переданное в функцию значение n изменяется там, но это не производит
никакого влияния на внешнее окружение функции (вызвавшую функцию
start()) — в функцию передаётся копия переменной nTick, так обычно работает вызов функций в MQL4.
PHP код:
Добавим один символ (&) в описание функции Inc() :
void Incint) { n++; }
Выполнение советника радикально изменится:
новый тик № 1
новый тик № 2
новый тик № 3
… 
Значок & указал, что в функцию нужно передать не копию, а оригинал переменной nTick, и все изменения, проделанные над этой переменной внутри функции, будут отражаться
на значении этой переменной снаружи функции. Такое
поведение называют побочный эффект функции.
[свернуть]

Мне кажется что в первом варианте не
будет алерт выдавать постоянно новый тик 0. Или будет?

Всё. Понял.
Если в функции написать nTick++; то будет увеличиватся значение в алерте. А так просто поработали с данными передаными и не изменили сами данные. Если надо менять сами данные которые передаются то перед вводной переменной в функции надо ставить &
Если в функции написать nTick++; то будет ошибка компиляции потому что переменная nTick локальна для функции start() не смотря на то что объявлена статической.
10.02.2014, 08:10
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,032 раз(а) / Репутация: 9032
  • Отправить сообщение для eevviill с помощью Skype™

По умолчанию Класы, структуры

Клас это база данных про определённый объект?
Если да, то по упрощенному это обычная функция которая возвращает-хранит данные про объект?
Если да то зачем класы?
Milord 
10.02.2014, 13:24
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 601
Поблагодарили 708 раз(а) / Репутация: 711
В том то и дело что пока, требуются небольшие корректировки.
Запросто могут, в одном из следующих билдов ещё улучшить, выкинув большинство "устаревших" функций.
я их критиковал и буду критиковать, за их тупизм и наглость, за их хамство на их форуме, либо игнор и бан за повторные вопросы от трейдеров и пользователей...
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)

Последний раз редактировалось NSerega; 11.02.2014 в 15:55.
Ответить

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 14:30. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO