В тестере и на чарте файлы пишутся и читаются в разных каталогах:
MetaTrader 4\tester\experts\files
MetaTrader 4\experts\files
Юрий, респект! Теперь понял, и исправил.
Zhunko, спасибо. Попробовал так, но получил ошибку, что-то типа can not read binary data from string file, или что-то в этом роде. В любом случае, моя конструкция работает.
Имхо, я бы не стал создавать массив тикетов для закрытия, а в цикле перебора рыночных ордеров проверил каждый ордер, подавая его тикет на вход закрывающей функции с проверкой возможных условий.
Возможно вопрос не совсем для новичка, но другой ветки не нашел, где можно задать вопрос:
каким образом можно выгрузить из MetaTrader 4 детализированный отчет, чтобы на графике был не баланс, а эквити? Или не выгрузить из MT4 а каким либо иным удобным способом реально ли это сделать? Ато торгуют совы, баланс толку нет смотреть - главное какие просадки дают.
//-----------------Закрытие по истории в безубыток--------------------//---------------------расчет по истории ордеров номера очередной итерации-----------------------------------------------
Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
Sum_Loss = 0; // суммарный убыток по этим итерациямdatetime
Time_at_History_Current = 0,
Time_at_History_Previos = 0;
if(OrdersHistoryTotal() != 0)
{
for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
{
OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера// для последующего его анализа при подсчете количества итераций
{
double lastLoss = OrderProfit();
Sum_Loss=Sum_Loss+lastLoss; // считаем общий убыток по закрытым подряд убыточным ордерам
Time_at_History_Current = OrderCloseTime();
}
//Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));//Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
{
Time_at_History_Previos = Time_at_History_Current ;
Iteration++;
//Print("Iteration at History в условии сравнения = ", Iteration);
}
else// они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
{
if(OrderProfit() >= 0)
break;
}
}
}
}
}
if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позамdouble money = Lots;
BuyLots = GetBuyLotsSum();
SellLots = GetSellLotsSum();
if(BuyLots > SellLots)money = BuyLots * 10;
if(BuyLots < SellLots)money = SellLots * 10;
if (((AccountEquity() + Sum_Loss + (Sum_Loss / money)) >= AccountBalance()) && (((totalSell > 0) && (totalBuy < 1)) || ((totalSell < 1) && (totalBuy > 0)))) { // Достигли безубытка// Здесь какой-то код, который необходимо выполнить при достижении безубытка
CloseAllBuy();
CloseAllSell();
Sum_Loss = 0.0;
ни как не получается у меня сделать, что бы когда была закрыта сделка в минус, то открывался цикл, и если следующий ордер закрылся больше нуля, тоесть положительный баланс, но меньше отрицательного, то мы к отрицательному прибавляем плюс, и получаем новое отрицательное значение, которое уже меньше.
if(OrderProfit() >= 0 && Sum_Loss < 0.0)
double lastLoss_two = OrderProfit();
Sum_Loss=Sum_Loss+lastLoss_two; // считаем общий убыток по закрытым подряд убыточным ордерам
Time_at_History_Current = OrderCloseTime();
}
а если больше отрицательного, по сигналу, то закрываем ордер и начинаем цикл с начала.
Ситуация в том, что когда данный код закрывает сделку в убыток, то он запоминает минусовой баланс, а когда закрывает сделку в плюс, и при этом плюс меньше баланса, то он обнуляет Sum_Loss, а мне надо, что бы он не обнулял, а скосил.
то есть, сейчас он вот как работает:
проверяет закрытый ордер, если у закрытого ордера профит меньше нуля, то этот профит приплюсовывается к Sum_Loss, и так до тех пор, пока профит открытой сделки не превысит (будет больше) Sum_Loss, при достижении сделка закрывается, и Sum_Loss обнуляется и начинает работать цикл сначала.
а мне нужно:
ордер закрылся в минус, его профит минусовой прибавился к Sum_Loss, после если следующая сделка закрылась с профитом положительным то уменьшаем сумму Sum_Loss на сумму полученную от прибыльного профита, а значит следующему открытому ордеру Sum_Loss достается уже с меньшей суммой, и так до тепх пор, пока прибыль от ордеров станет больше Sum_Loss, и тогда Sum_Loss обнуляем и начинаем новый цикл.
Sum_Loss = 0;
1-й закрытый ордер: профит (-50) < 0
Sum_Loss + профит (Sum_Loss + (-50))
Sum_Loss = -50;
2-й закрытый ордер: профит(+40) > 0 и Sum_Loss < 0
Sum_Loss + профит (Sum_Loss + 40)
Sum_Loss = -10
Может нужно как то переменную Sum_Loss указывать отрицательной? в общим я запутался. перепробовал много вариантов, а правильного результата так и не получил. Хоть направте меня в правильном напровлении, подскажите что да как нужно сделать, а то я чето не допойму.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
В тестере и на чарте файлы пишутся и читаются в разных каталогах:
Юрий, респект! Теперь понял, и исправил.
Zhunko, спасибо. Попробовал так, но получил ошибку, что-то типа can not read binary data from string file, или что-то в этом роде. В любом случае, моя конструкция работает.
Имхо, я бы не стал создавать массив тикетов для закрытия, а в цикле перебора рыночных ордеров проверил каждый ордер, подавая его тикет на вход закрывающей функции с проверкой возможных условий.
А можете показать это в коде???
Т.е как это можно реализовать?
Добрый день всем!
Возможно вопрос не совсем для новичка, но другой ветки не нашел, где можно задать вопрос:
каким образом можно выгрузить из MetaTrader 4 детализированный отчет, чтобы на графике был не баланс, а эквити? Или не выгрузить из MT4 а каким либо иным удобным способом реально ли это сделать? Ато торгуют совы, баланс толку нет смотреть - главное какие просадки дают.
Спасибо большое!!
А можете показать это в коде???
Т.е как это можно реализовать?
Ну как-то так
помогите плиииз.
вот код
ни как не получается у меня сделать, что бы когда была закрыта сделка в минус, то открывался цикл, и если следующий ордер закрылся больше нуля, тоесть положительный баланс, но меньше отрицательного, то мы к отрицательному прибавляем плюс, и получаем новое отрицательное значение, которое уже меньше.
а если больше отрицательного, по сигналу, то закрываем ордер и начинаем цикл с начала.
Ситуация в том, что когда данный код закрывает сделку в убыток, то он запоминает минусовой баланс, а когда закрывает сделку в плюс, и при этом плюс меньше баланса, то он обнуляет Sum_Loss, а мне надо, что бы он не обнулял, а скосил.
то есть, сейчас он вот как работает:
проверяет закрытый ордер, если у закрытого ордера профит меньше нуля, то этот профит приплюсовывается к Sum_Loss, и так до тех пор, пока профит открытой сделки не превысит (будет больше) Sum_Loss, при достижении сделка закрывается, и Sum_Loss обнуляется и начинает работать цикл сначала.
а мне нужно:
ордер закрылся в минус, его профит минусовой прибавился к Sum_Loss, после если следующая сделка закрылась с профитом положительным то уменьшаем сумму Sum_Loss на сумму полученную от прибыльного профита, а значит следующему открытому ордеру Sum_Loss достается уже с меньшей суммой, и так до тепх пор, пока прибыль от ордеров станет больше Sum_Loss, и тогда Sum_Loss обнуляем и начинаем новый цикл.
Sum_Loss = 0;
1-й закрытый ордер: профит (-50) < 0
Sum_Loss + профит (Sum_Loss + (-50))
Sum_Loss = -50;
2-й закрытый ордер: профит(+40) > 0 и Sum_Loss < 0
Sum_Loss + профит (Sum_Loss + 40)
Sum_Loss = -10
Может нужно как то переменную Sum_Loss указывать отрицательной? в общим я запутался. перепробовал много вариантов, а правильного результата так и не получил. Хоть направте меня в правильном напровлении, подскажите что да как нужно сделать, а то я чето не допойму.Как протестировать советник без учета спрэда? Такое возможно?
у кого есть такой индюк?
Помогите пожалуйста.
Я поставил модификатор отложенных ордеров, в советник, а он мне при тестировании в Журнал выдаёт ошибку - 1.
Т.е. - "Если в качестве параметров функции передать неизменные значения, то в этом случае будет сгенерирована ошибка 1 (ERR_NO_RSULT)."
Я перед модификацийе поставил проверку, но не помогает. В чём ошибка? Советник тестируется, но как отсеять ордера с неизменными значениями?
у кого есть такой индюк?
Вот глянь:
http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=45