[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 521
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А как бы я его проверил?
Спасибо.
а вообще вожможно ли сделать чтобы без перезапуска советника настройка MaxEquity работала например 500 раз.
например если написать в счетчике число 500, то пусть будет получаться так: допустим первоначальный эквити 10 000,
то после приращения к первоначальному эквити 10 000 ( указыв. в настройках ) - закрываются большие минуса.
И так 500 раз ( например ) ( ведь все равно не возможно 500 раз умножить первоначальный эквити ).
То есть разница получится с Вашим вариантом - что после приращения 10 000 к превоначальному эквити = 10 000 -
советник не нужно перезапускать, а цикл продолжится - к 20 000 прибавится еще 10 000,к 30 000 + 10 000 и так 500 раз ( например ). Ну
и после каждого приращения = 10 000, будет закрываться убыточный ордер с самым большим минусом ( или нес-ко ордеров - указыв. в настройках ) ?
Спасибо.
а вообще вожможно ли сделать чтобы без перезапуска советника настройка MaxEquity работала например 500 раз.
например если написать в счетчике число 500, то пусть будет получаться так: допустим первоначальный эквити 10 000,
то после приращения к первоначальному эквити 10 000 ( указыв. в настройках ) - закрываются большие минуса.
И так 500 раз ( например ) ( ведь все равно не возможно 500 раз умножить первоначальный эквити ).
То есть разница получится с Вашим вариантом - что после приращения 10 000 к превоначальному эквити = 10 000 -
советник не нужно перезапускать, а цикл продолжится - к 20 000 прибавится еще 10 000,к 30 000 + 10 000 и так 500 раз ( например ). Ну
и после каждого приращения = 10 000, будет закрываться убыточный ордер с самым большим минусом ( или нес-ко ордеров - указыв. в настройках ) ?
Не нужно делать никаких перезапусков. Нужно обновлять данные по изначальному эквити после закрытия позиций и ждать приращения эквити уже с нового начального эквити.
но как я понял это все делается в программном коде. Я то не имею силы программирования )
Естественно. Нужна лишь одна ф-ция, которая будет постоянно отслеживать эквити и при превышении заданного значения, отсылать команду на закрытие убыточных позиций. Далее, после успешного закрытия всех этих позиций, запоминать новое состояние эквити и продолжать далее его отслеживать.
Подскажите в чём может быть проблема?
Предположу, что в моём вопросе не достаточно информации, чтобы мне помочь.)) Дополню свой вопрос. Ниже предоставляю структуру с основными функциями своего эксперта. Может быть так получиться выявить в чём проблема, которую я осветил.
На данный момент приходиться каждый раз компилировать заново эксперта после включения/отключения функции управления капиталом в параметрах эксперта, чтобы отчёт формировался корректно.
P.S. Может быть это связано с глобальной переменной терминала fxprop_lot ?
Предположу, что в моём вопросе не достаточно информации, чтобы мне помочь.)) Дополню свой вопрос. Ниже предоставляю структуру с основными функциями своего эксперта. Может быть так получиться выявить в чём проблема, которую я осветил.
На данный момент приходиться каждый раз компилировать заново эксперта после включения/отключения функции управления капиталом в параметрах эксперта, чтобы отчёт формировался корректно.
P.S. Может быть это связано с глобальной переменной терминала fxprop_lot ?
Если Вы считаете что этого достаточно, то видимо - да. Осталось дождаться ответа. У меня его нету
Если Вы считаете что этого достаточно, то видимо - да. Осталось дождаться ответа. У меня его нету
А в следующем посте функцию формирования отчёта...Мой опыт пока к сожалению не позволяет мне судить о том, достаточно ли предоставляемой информации для решения того или иного вопроса или не достаточно. Я не специально и прошу прощения, если что.)) Дело в том, что в проблеме, которую я осветил на мой взгляд ключевой момент в том, что при перекомпиляции эксперта всё работает корректно. Но это опять же в силу своего незрелого опыта. Подскажите, пожалуйста, какую информацию нужно предоставить, чтобы решить данный вопрос. В проблеме явно фигурирует функция управления капиталом либо функция формирования отчёта. Поэтому предоставлю функцию управления капиталом:
void Short_Trade_Report(int Mgc_Src_LP_TS№1,int Mgc_LP01_TS№1,int Mgc_LP02_TS№1,int Mgc_LP03_TS№1,int Mgc_LP04_TS№1,int Mgc_LP05_TS№1,int Mgc_LP06_TS№1, int Mgc_Src_SP_TS№1,int Mgc_SP01_TS№1,int Mgc_SP02_TS№1,int Mgc_SP03_TS№1,int Mgc_SP04_TS№1,int Mgc_SP05_TS№1,int Mgc_SP06_TS№1, int Mgc_Src_LP_TS№2,int Mgc_LP01_TS№2,int Mgc_LP02_TS№2,int Mgc_LP03_TS№2,int Mgc_LP04_TS№2,int Mgc_LP05_TS№2,int Mgc_LP06_TS№2, int Mgc_Src_SP_TS№2,int Mgc_SP01_TS№2,int Mgc_SP02_TS№2,int Mgc_SP03_TS№2,int Mgc_SP04_TS№2,int Mgc_SP05_TS№2,int Mgc_SP06_TS№2, int Mgc_Src_LP_TS№3,int Mgc_LP01_TS№3,int Mgc_LP02_TS№3,int Mgc_LP03_TS№3,int Mgc_LP04_TS№3,int Mgc_LP05_TS№3,int Mgc_LP06_TS№3, int Mgc_Src_SP_TS№3,int Mgc_SP01_TS№3,int Mgc_SP02_TS№3,int Mgc_SP03_TS№3,int Mgc_SP04_TS№3,int Mgc_SP05_TS№3,int Mgc_SP06_TS№3) { #define RA 10000 // Range Array - Размер массива для отчёта double Acc_Bal_Close[RA]; // Массив для баланса на закрытии сделки(-ок) double Acc_Bal_Open[RA]; // Массив для баланса на открытии сделки(-ок) double Price_Open_Pos[RA]; double Price_Stop_Loss[RA]; double TS№1_DS[RA], TS№2_TA[RA], TS№3_SBH[RA]; int pos, handle, dgt, Magic, sign, index; double Swap_P; double Profit_P; double Commission; double Open_Price; double Stop_Loss; string Type_Pos; string comment; string Str_Stop_Loss; //--- ПРОВЕРКА НА КОЛ-ВО ЗНАКОВ В СИМВОЛЕ ДЛЯ РАСЧЁТА ОТСТУПА В СТРОКАХ КОММЕНТАРИЕВ --------------------------------// int digit_string; int digit = MarketInfo(Symbol(),MODE_DIGITS); switch(digit) { case 2 : digit_string = 4; dgt = 100; break; case 3 : digit_string = 5; dgt = 100; break; case 4 : digit_string = 6; dgt = 10000; break; case 5 : digit_string = 7; dgt = 10000; break; default: Print("Неизвестный символ! Количество знаков = ",digit); return(0); } handle = FileOpen("ShortReport.csv",FILE_CSV|FILE_WRITE); if(handle > 0) //1 { FileWrite(handle,"Time Close"+","+"Symbol"+","+"Type"+","+"Lots"+","+"Balance($)"+","+"Stop Loss(p)"+","+"Profit(p)"+","+"TS#1_DS(p)"+","+"TS#2_TA(p)"+","+"TS#3_SBH(p)"); for(pos = 0; pos < OrdersHistoryTotal(); pos++) // 2 { OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY); Commission = OrderCommission(); Swap_P = (OrderSwap()/10)/OrderLots(); Profit_P = (OrderProfit()/10)/OrderLots()+(OrderSwap()/10)/OrderLots(); Open_Price = NormalizeDouble(OrderOpenPrice(),Digits); index = StringFind(OrderComment(),"[sl]",0); if(index != -1) { comment = StringSubstr(OrderComment(),0,StringLen(OrderComment())-4); } else { comment = StringSubstr(OrderComment(),0,StringLen(OrderComment())); } if(OrderType() < 2 && OrderCloseTime() == TimeCurrent() && (OrderMagicNumber() == Mgc_Src_LP_TS№1 || OrderMagicNumber() == Mgc_Src_SP_TS№1 || OrderMagicNumber() == Mgc_LP01_TS№1 || OrderMagicNumber() == Mgc_LP02_TS№1 || OrderMagicNumber() == Mgc_LP03_TS№1 || OrderMagicNumber() == Mgc_LP04_TS№1 || OrderMagicNumber() == Mgc_LP05_TS№1 || OrderMagicNumber() == Mgc_LP06_TS№1 || OrderMagicNumber() == Mgc_SP01_TS№1 || OrderMagicNumber() == Mgc_SP02_TS№1 || OrderMagicNumber() == Mgc_SP03_TS№1 || OrderMagicNumber() == Mgc_SP04_TS№1 || OrderMagicNumber() == Mgc_SP05_TS№1 || OrderMagicNumber() == Mgc_SP06_TS№1)) { TS№1_DS[pos] = Profit_P + Swap_P + Commission; Acc_Bal_Close[pos] = AccountBalance(); Str_Stop_Loss = StringSubstr(comment,StringLen(comment)-digit_string,digit_string); Price_Stop_Loss[pos] = MathAbs((StrToDouble(Str_Stop_Loss)-Open_Price)*dgt); } if(OrderType() < 2 && OrderCloseTime() == TimeCurrent() && (OrderMagicNumber() == Mgc_Src_LP_TS№2 || OrderMagicNumber() == Mgc_Src_SP_TS№2 || OrderMagicNumber() == Mgc_LP01_TS№2 || OrderMagicNumber() == Mgc_LP02_TS№2 || OrderMagicNumber() == Mgc_LP03_TS№2 || OrderMagicNumber() == Mgc_LP04_TS№2 || OrderMagicNumber() == Mgc_LP05_TS№2 || OrderMagicNumber() == Mgc_LP06_TS№2 || OrderMagicNumber() == Mgc_SP01_TS№2 || OrderMagicNumber() == Mgc_SP02_TS№2 || OrderMagicNumber() == Mgc_SP03_TS№2 || OrderMagicNumber() == Mgc_SP04_TS№2 || OrderMagicNumber() == Mgc_SP05_TS№2 || OrderMagicNumber() == Mgc_SP06_TS№2)) { TS№2_TA[pos] = Profit_P + Swap_P + Commission; Acc_Bal_Close[pos] = AccountBalance(); Str_Stop_Loss = StringSubstr(comment,StringLen(comment)-digit_string,digit_string); Price_Stop_Loss[pos] = MathAbs((StrToDouble(Str_Stop_Loss)-Open_Price)*dgt); } if(OrderType() < 2 && OrderCloseTime() == TimeCurrent() && (OrderMagicNumber() == Mgc_Src_LP_TS№3 || OrderMagicNumber() == Mgc_Src_SP_TS№3 || OrderMagicNumber() == Mgc_LP01_TS№3 || OrderMagicNumber() == Mgc_LP02_TS№3 || OrderMagicNumber() == Mgc_LP03_TS№3 || OrderMagicNumber() == Mgc_LP04_TS№3 || OrderMagicNumber() == Mgc_LP05_TS№3 || OrderMagicNumber() == Mgc_LP06_TS№3 || OrderMagicNumber() == Mgc_SP01_TS№3 || OrderMagicNumber() == Mgc_SP02_TS№3 || OrderMagicNumber() == Mgc_SP03_TS№3 || OrderMagicNumber() == Mgc_SP04_TS№3 || OrderMagicNumber() == Mgc_SP05_TS№3 || OrderMagicNumber() == Mgc_SP06_TS№3)) { TS№3_SBH[pos] = Profit_P + Swap_P + Commission; Acc_Bal_Close[pos] = AccountBalance(); Str_Stop_Loss = StringSubstr(comment,StringLen(comment)-digit_string,digit_string); Price_Stop_Loss[pos] = MathAbs((StrToDouble(Str_Stop_Loss)-Open_Price)*dgt); } if(OrderType() == OP_BUY) { Type_Pos = "buy"; } if(OrderType() == OP_SELL) { Type_Pos = "sell"; } if(OrderType() < 2) { FileWrite(handle,TimeToStr(OrderCloseTime(),TIME_DATE|TIME_MINUTES)+","+Symbol()+","+Type_Pos+"," +DoubleToStr(OrderLots(),2)+","+DoubleToStr(Acc_Bal_Close[pos],2)+","+DoubleToStr(Price_Stop_Loss[pos],2)+"," +DoubleToStr(Profit_P+Swap_P+Commission,2)+","+DoubleToStr(TS№1_DS[pos],2)+","+DoubleToStr(TS№2_TA[pos],2)+","+DoubleToStr(TS№3_SBH[pos],2)); } } FileClose(handle); // 2\ } //1 }
Прошу помочь в решении вопроса.Попробовал вызывать функцию управления капиталом при инициализации:
Но это не решает проблему...