Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1936

 
VIREDS #:
Доброго времени знающим mql4. Имеется функция закрывающая часть в процентах самого дальнего убыточного ордера в серии за счет прибыльных позиций любого направления. Очень нужна помощь в доработке этой функции! А именно сделать частичное закрытие всех оставшихся ордеров в серии (за счет прибыльных позиций любого направления) вместо одного дальнего. Заранее Спасибо!
Я с такой функцией месяца 2 мучался. Там столько нюансов. Особенно вот эта строчка 
 ProfitPer=OrderProfit()+OrderCommission()+OrderSwap();//ПРОФИТ ОДНОГО ОРДЕРА

Когда в сетке висит много ордеров, при закрытии она даёт общий убыток, хотя должна все в ноль закрыть. Я в итоге комиссии и свопы вообще убрал

double spreadLoss =(MarketInfo(_Symbol,MODE_TICKVALUE)* MarketInfo(_Symbol,MODE_SPREAD));
 
А дальше уже в функции можно на лот/лотстеп умножать для каждого ордера, но я просто множитель сделал 
 
И перед OrderClose() забыли (!)
 
Добрый день. Подскажите пожалуйста как можно оплатить сервисы MQL4 в связи со сложившейся обстановкой
 

Всем добрый день. У меня есть индикатор, который при появлении сигнала рисует на графике стрелку. Получается что все эти стрелки по истории на графике расставлены и можно оценить потенциал сигналов.

график со стрелками индикатора.

Попробовал прикрутить алерт чтобы он сигнализировал о появлении сигнала. Нашёл в индикаторе функцию, которая рисует стрелки при появлении сигнала.

void SetDivergenceUP(string sy, int work_period, int wnd, string name_ind, string pattern, const datetime &time[], int index,
                     datetime left_time, double left_point, datetime time_b, double ind_b, 
                     datetime last_prc_tm, double last_prc_val, datetime time_extr, datetime &last_time_gv, double price_extr, double &Buffer[]) {
   double atr=iATR(sy,PERIOD_CURRENT,14,index);
   color line_color=clrNONE;
   string nm="", gv_name="";
   if(name_ind=="AO") {line_color=ColorUpperAO; gv_name=GV_nameCTS;}
   else if(name_ind=="MACD") {line_color=ColorUpperMACD; gv_name=GV_nameCTS;}
   else if(name_ind=="RSI") {line_color=ColorUpperRSI; gv_name=GV_nameCTS;}
   else {line_color=ColorUpperSTO; gv_name=GV_nameCTS;}
   //--- поставим сигнальную стрелку на график цены и запишем сигнал для CTS и его время
   //int bar_extr=Bars(sy,PERIOD_CURRENT,TimeCurrent(),time_extr);
   int bar_extr=GetBarShift(sy,PERIOD_CURRENT,time_extr);
   //Buffer[bar_extr]=GetPriceHigh(sy,Period(),bar_extr);
   Buffer[index]=GetPriceHigh(sy,Period(),index)+atr*shiftArrow;
   if(ModeSignalsCTS==enBoth || ModeSignalsCTS==enSell) {
      GlobalVariableSet(gv_name,-1.0);
      last_time_gv=time[index];
      }
   //--- соединим линией ближайшие точки экстремумов цены
   int last_bar_extr=Bars(sy,PERIOD_CURRENT,TimeCurrent(),last_prc_tm);
   nm=Prefix+"P"+name_ind+"divUpper"+TimeToString(time_b);
   SetTLine(0,nm,line_color,0,last_prc_tm,last_prc_val,time_extr,price_extr,widthChartLine,pattern+" "+name_ind+(work_period==Period()?"":"\nна периоде "+GetNameTF(work_period)));
   //--- если есть окно индикатора, соединим линией ближайшие точки экстремумов индикатора
   if(wnd>0) {
      nm=Prefix+name_ind+"divUpper"+TimeToString(time_b);
      SetTLine(0,nm,line_color,wnd,left_time,left_point,time_b,ind_b,widthIndicatorstLine,pattern+" "+(work_period==Period()?"":"\nна периоде "+GetNameTF(work_period)));
      }

}


 В конец этой функции я добавил строку для выдачи Алерта. Выделил добавленную строку цветом;-)

void SetDivergenceUP(string sy, int work_period, int wnd, string name_ind, string pattern, const datetime &time[], int index,
                     datetime left_time, double left_point, datetime time_b, double ind_b, 
                     datetime last_prc_tm, double last_prc_val, datetime time_extr, datetime &last_time_gv, double price_extr, double &Buffer[]) {
   double atr=iATR(sy,PERIOD_CURRENT,14,index);
   color line_color=clrNONE;
   string nm="", gv_name="";
   if(name_ind=="AO") {line_color=ColorUpperAO; gv_name=GV_nameCTS;}
   else if(name_ind=="MACD") {line_color=ColorUpperMACD; gv_name=GV_nameCTS;}
   else if(name_ind=="RSI") {line_color=ColorUpperRSI; gv_name=GV_nameCTS;}
   else {line_color=ColorUpperSTO; gv_name=GV_nameCTS;}
   //--- поставим сигнальную стрелку на график цены и запишем сигнал для CTS и его время
   //int bar_extr=Bars(sy,PERIOD_CURRENT,TimeCurrent(),time_extr);
   int bar_extr=GetBarShift(sy,PERIOD_CURRENT,time_extr);
   //Buffer[bar_extr]=GetPriceHigh(sy,Period(),bar_extr);
   Buffer[index]=GetPriceHigh(sy,Period(),index)+atr*shiftArrow;
   if(ModeSignalsCTS==enBoth || ModeSignalsCTS==enSell) {
      GlobalVariableSet(gv_name,-1.0);
      last_time_gv=time[index];
      }
   //--- соединим линией ближайшие точки экстремумов цены
   int last_bar_extr=Bars(sy,PERIOD_CURRENT,TimeCurrent(),last_prc_tm);
   nm=Prefix+"P"+name_ind+"divUpper"+TimeToString(time_b);
   SetTLine(0,nm,line_color,0,last_prc_tm,last_prc_val,time_extr,price_extr,widthChartLine,pattern+" "+name_ind+(work_period==Period()?"":"\nна периоде "+GetNameTF(work_period)));
   //--- если есть окно индикатора, соединим линией ближайшие точки экстремумов индикатора
   if(wnd>0) {
      nm=Prefix+name_ind+"divUpper"+TimeToString(time_b);
      SetTLine(0,nm,line_color,wnd,left_time,left_point,time_b,ind_b,widthIndicatorstLine,pattern+" "+(work_period==Period()?"":"\nна периоде "+GetNameTF(work_period)));
      }
      Alert("ДИВЕРГЕНЦИЯ НА "+Symbol());
}

лерт-то заработал и в тестере всё норм. А вот при запуске терминала и если на графике был накинут индикатор то он выдаёт столько звуковых сигналов и сообщений сколько стрелок было на историиJ что нужно сделать и как чтобы Алерт выдавался только при поступлении последнего сигнала когда терминал включен, а  на стрелки по истории молчал?
 
DanilaMactep #:

Всем добрый день. У меня есть индикатор, который при появлении сигнала рисует на графике стрелку. Получается что все эти стрелки по истории на графике расставлены и можно оценить потенциал сигналов.

Попробовал прикрутить алерт чтобы он сигнализировал о появлении сигнала. Нашёл в индикаторе функцию, которая рисует стрелки при появлении сигнала.


 В конец этой функции я добавил строку для выдачи Алерта. Выделил добавленную строку цветом;-)

лерт-то заработал и в тестере всё норм. А вот при запуске терминала и если на графике был накинут индикатор то он выдаёт столько звуковых сигналов и сообщений сколько стрелок было на историиJ что нужно сделать и как чтобы Алерт выдавался только при поступлении последнего сигнала когда терминал включен, а  на стрелки по истории молчал?
Алертить только на первом или нулевом баре.
 

Коллеги - организационный вопрос:

свободного места на диске С на моем компе, где тестирую и оптимизирую экспов на Мт4 и МТ 5 стало мало... типа из 220 осталось 30 Гб по моему...

Подозреваю, что место занято логами ранее работавших роботов или тестируемых, также историей по разным символам разных терминалов и на МТ 4  и на МТ 5 - интересует:

как можно очистить историю символов (тиков по символам) и логи в разных папках терминалы находятся (их всего не много около 5).

Типа как раньше на МТ 4 был волшебный файл clear.bat.

В общем нужны вариант (-ы) чистки места из под истории символов (их тиков) и логов по разным папкам. Все ярлыки на рабочем столе есть к МТ 4 и МТ5. Вроде как...

в общем очистить место на диске из под прошлых тестов (истории тиков символов)  и торгов (логов их).

Хотя бы где почитать, как чистить и какие папки удалять и на МТ 4 и на МТ5 - где они находятся...

Спс.

 

Подскажите, пожалста. 

Советник через iCustom использует индикатор, при этом на каждом тике в журнале вот такие ошибки. 

Можно ли это исправить без редактирования индикатора?  И если да, то как?

 
ALEKSANDR SOKOLOV #:

Подскажите, пожалста. 

Советник через iCustom использует индикатор, при этом на каждом тике в журнале вот такие ошибки. 

Можно ли это исправить без редактирования индикатора?  И если да, то как?

Если индикатор, запущенный отдельно от советника, таких записей не выдаёт, то проверьте правильность указания в советнике параметров индикатора при вызове его через iCustom()

 
Roman Shiredchenko #:

Коллеги - организационный вопрос:

свободного места на диске С на моем компе, где тестирую и оптимизирую экспов на Мт4 и МТ 5 стало мало... типа из 220 осталось 30 Гб по моему...

Подозреваю, что место занято логами ранее работавших роботов или тестируемых, также историей по разным символам разных терминалов и на МТ 4  и на МТ 5 - интересует:

как можно очистить историю символов (тиков по символам) и логи в разных папках терминалы находятся (их всего не много около 5).

Типа как раньше на МТ 4 был волшебный файл clear.bat.

В общем нужны вариант (-ы) чистки места из под истории символов (их тиков) и логов по разным папкам. Все ярлыки на рабочем столе есть к МТ 4 и МТ5. Вроде как...

в общем очистить место на диске из под прошлых тестов (истории тиков символов)  и торгов (логов их).

Хотя бы где почитать, как чистить и какие папки удалять и на МТ 4 и на МТ5 - где они находятся...

Спс.

Сколько лет компу и когда системные логи чистили в локальных папках, папках темп и служебных интеловских или других производителей папках. На 10 летнем компе где тока браузер и офис снес почти 100 гигов сиклинером из под админа. У себя в интеловской папке нашел 25 гб. 

Тики в папке хистори. Там тоже например с бинанса по всем символам было 25 гб.  И логи в общей и мкл папке проверять. Если снести логи, то ни на что не влияет. А вот тики если снести, то возможно придется подождать пока подгрузятся нужные.

Причина обращения: