//-----------------Закрытие по истории в безубыток--------------------//---------------------расчет по истории ордеров номера очередной итерации-----------------------------------------------
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();
}
а если больше отрицательного, по сигналу, то закрываем ордер и начинаем цикл с начала.
Да. Это мой код. Я же уже писал Вам, что использую его у себе в переворотном мартине следующим образом:
Если крайняя сделка (поза) была закрыта в плюс, то обнуляем количество переворотов (Iteration) и стартуем стартовым лотом, если в минус,
то считаем количество подряд убыточных сделок и открываемся в противоположную сторону увеличенным объёмом.
Это - неттинговая версия Лавины (см. одноимённую ветвь), т.е. закрывается (при перевороте позы на увеличенных объёмах) рыночный ордер и открывается противоположный рыночный на бОльших объёмах в зависимости от схемы доливок. Вот мой рабочий участок кода. Правьте под свои нужды, если у Вас подобный алгоритм экспа. Я толком ничего не понял в Вашем вопросе. Можете вне зависимости от ситуации поинтересоваться в ветке "Любой вопрос новичка...", только подробнее распишите Ваш вопрос, а то ничего (мне, по крайней мере) не понятно - вообще.
//---------------------расчет по истории ордеров номера очередной итерации-----------------------------------------------
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;
}
}
}
}
}
//Print("Iteration at History = ", Iteration, " Time_at_History_Current = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS),// " Time_at_History_Previos = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));//-----------------------------------------------------расчет динамического канала---------------------------- if (Symbol() == "GBPJPY" || Symbol() == "EURJPY" || Symbol() == "USDJPY" || Symbol() == "CHFJPY" || Symbol() == "NZDJPY")
// || Symbol() == "XAUUSD" || Symbol() == "XAGUSD" || Symbol() == "EURGBP") StopLossPips = StopLoss; // т.к. волатильность (по АТР) другая (выше)
{
channel = (iATR(Symbol(),PERIOD_D1,Period_ATR,1)*1000)*Mul_Sl;
StopLossPips = NormalizeDouble(channel,0);
}
else
{
channel = 10* (iATR(Symbol(),PERIOD_D1,Period_ATR,1)*10000/3)*Mul_Sl;
StopLossPips = NormalizeDouble(channel,0);
}
TakeProfitPips=NormalizeDouble(StopLossPips*Mul_TP,0); // расчет уровня тейка для всех инструментов по заданному значению динамического стопа // ------------------------------------------------Ищем наш ордер---------------------------------int orderType;
for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
{
if (!OrderSelect(orderIndex, SELECT_BY_POS)) continue; // если ордер не выбран, то идем на следующий открытыйif(OrderCloseTime()!=0) continue; // если тикет принадлежит закрытому ордеру, то берем следующий открытыйif ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) continue;
orderType = OrderType();
if ((orderType != OP_BUY) && (orderType != OP_SELL)) continue;
ticket = OrderTicket( ); // Номер ордера
orderLots = OrderLots(); // Lots
orderProfit = OrderProfit() + OrderSwap(); // Profit
Price = OrderOpenPrice(); // Цена открытия рыночного ордера
SL = OrderStopLoss(); // Значение StopLoss ордера
TP = OrderTakeProfit(); // Значение TakeProfit ордера if (ticket>0) // Если позиция открылась
{
while(OrderSelect(ticket,SELECT_BY_TICKET)==false) // Если ордер выбранSleep(100);
double OpenPrice=OrderOpenPrice();
// Print("OrderTicket()=",OrderTicket(), "OrderOpenTime()=",OrderOpenTime()); // Print("TimeLocal()=",TimeLocal()); //---------------------Запоминаем значения сл и тп ордера if (orderType == OP_BUY)
{
V_StopLossPips = NormalizeDouble(OpenPrice - (StopLossPips * Point), Digits);
V_TakeProfitPips = NormalizeDouble(OpenPrice + (TakeProfitPips * Point), Digits);
}
if (orderType == OP_SELL)
{
V_StopLossPips = NormalizeDouble(OpenPrice + (StopLossPips * Point), Digits);
V_TakeProfitPips = NormalizeDouble(OpenPrice - (TakeProfitPips * Point), Digits);
}
}
// Проверка на предельную просадку double loss = - ((orderProfit * 100.0) / AccountBalance());
if (loss > MaxLoss)
{
Print ("MaxLoss");
CloseAllOrders(MagicNumber);
IsExpertFailed = true;
return (0);
}
// Проверка закрытия открытой позиции (ордера) по стоп-лоссу if ( V_StopLossPips != 0 )
{
if (orderType == OP_BUY && Bid <= V_StopLossPips) { CloseAllOrders(MagicNumber); Print ("V_StopLossPips закрываем по сл = ", V_StopLossPips); }
if (OrderType()== OP_SELL && Ask >= V_StopLossPips){ CloseAllOrders(MagicNumber); Print ("V_StopLossPips закрываем по сл = ", V_StopLossPips); }
}
// Проверка закрытия открытой позиции (ордера) по тейку if ( V_TakeProfitPips != 0 && MathAbs(orderProfit) > MathAbs (Sum_Loss))
{
if (orderType == OP_BUY && Bid >= V_TakeProfitPips) { CloseAllOrders(MagicNumber); Print ("V_TakeProfitPips закрываем по ТР = ", V_TakeProfitPips); }
if (OrderType()== OP_SELL && Ask <= V_TakeProfitPips){ CloseAllOrders(MagicNumber); Print ("V_TakeProfitPips закрываем по ТР = ", V_TakeProfitPips); }
}
// Если тралить, то с соответствующего номера итерации при выполнении НЕОБХОДИМОГО УСЛОВИЯ соответствующим // выбранному видом трала if (UseTrailing==1) if ((Iteration >= k)&& (MathAbs(orderProfit) > (MathAbs (Sum_Loss))))
switch(type)
{
case0: // простой трал по аналогии учебнику - в зависимости от параметра trlinloss (тралить ли в зоне лоссов)if (orderType == OP_BUY) SampleTrailing_texbook (0, V_StopLossPips, V_TakeProfitPips); // если байif (orderType == OP_SELL) SampleTrailing_texbook (1, V_StopLossPips, V_TakeProfitPips); // если селлbreak;
//трал по фракталам + отступ (Indent)case1: TrailingByFractals_LAVINA(ticket,signal_period,Sum_Loss,Lots_New,V_StopLossPips,trlinloss); break;
//трал по теням N свечей + отступ (Indent) case2: TrailingByShadows (ticket,signal_period,Sum_Loss,Lots_New,V_StopLossPips,trlinloss); break;
}
П.С. Вы у меня так выманите всего моего боевого робота, с рук которого я щас ем. Работал над ним с перерывами и выходами на соответствующие алгоритмы с сентября 2010 года. См. ветку - Лавина.
Да. Это мой код. Я же уже писал Вам, что использую его у себе в переворотном мартине следующим образом:
Если крайняя сделка (поза) была закрыта в плюс, то обнуляем количество переворотов (Iteration) и стартуем стартовым лотом, если в минус,
то считаем количество подряд убыточных сделок и открываемся в противоположную сторону увеличенным объёмом.
Это - неттинговая версия Лавины (см. одноимённую ветвь), т.е. закрывается (при перевороте позы на увеличенных объёмах) рыночный ордер и открывается противоположный рыночный на бОльших объёмах в зависимости от схемы доливок. Вот мой рабочий участок кода. Правьте под свои нужды, если у Вас подобный алгоритм экспа. Я толком ничего не понял в Вашем вопросе. Можете вне зависимости от ситуации поинтересоваться в ветке "Любой вопрос новичка...", только подробнее распишите Ваш вопрос, а то ничего (мне, по крайней мере) не понятно - вообще.
П.С. Вы у меня так выманите всего моего боевого робота, с рук которого я щас ем. Работал над ним с перерывами и выходами на соответствующие алгоритмы с сентября 2010 года. См. ветку - Лавина.
я уже обращался в ветку "любой вопрос новичка" и там тишина.
Ситуация в том, что когда данный код закрывает сделку в убыток, то он запоминает минусовой баланс, а когда закрывает сделку в плюс, и при этом плюс меньше баланса, то он обнуляет 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
1. я уже обращался в ветку "любой вопрос новичка" и там тишина.
Ситуация в том, что когда данный код закрывает сделку в убыток, то он запоминает минусовой баланс, а когда закрывает сделку в плюс, и при этом плюс меньше баланса, то он обнуляет Sum_Loss, а мне надо, что бы он не обнулял, а скосил.
2. то есть, сейчас он вот как работает:
проверяет закрытый ордер, если у закрытого ордера профит меньше нуля, то этот профит приплюсовывается к Sum_Loss, и так до тех пор, пока профит открытой сделки не превысит (будет больше) Sum_Loss, при достижении сделка закрывается, и Sum_Loss обнуляется и начинает работать цикл сначала.
3. а мне нужно:
ордер закрылся в минус, его профит минусовой прибавился к 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
1. Обращайтесь ещё раз - там люди обязательно помогут... предварительно выложив в ту ветвь Ваш код... (какой есть)
2. Всё верно, т.к. это базовый алгоритм Лавины.
3. Всё это и расписывайте в новичковской ветке с Вашим кодом этого алгоритма. Люди - поправят. Сами начинайте последовательно и спокойно писать код на мкл4.
Если не справляетесь сами, обращайтесь в раздел "Работа" на пятом форуме - там пишут за еду...
На халяву с нуля код будут писать ТОЛЬКО при наличии личного интереса!
Третий день ручной торговли, на сегодня торговля окончена
Позравляю! У меня пачка селлов по евро на откате вниз - закрыта, по фунту - нет...
50 000 cent - перемахнул - уже хорошо! :-)
приветствую.
возможно кому то знаком такой код:
ни как не получается у меня сделать, что бы когда была закрыта сделка в минус, то открывался цикл, и если следующий ордер закрылся больше нуля, тоесть положительный баланс, но меньше отрицательного, то мы к отрицательному прибавляем плюс, и получаем новое отрицательное значение, которое уже меньше.
а если больше отрицательного, по сигналу, то закрываем ордер и начинаем цикл с начала.
приветствую.
возможно кому то знаком такой код:Да. Это мой код. Я же уже писал Вам, что использую его у себе в переворотном мартине следующим образом:
Если крайняя сделка (поза) была закрыта в плюс, то обнуляем количество переворотов (Iteration) и стартуем стартовым лотом, если в минус,
то считаем количество подряд убыточных сделок и открываемся в противоположную сторону увеличенным объёмом.
Это - неттинговая версия Лавины (см. одноимённую ветвь), т.е. закрывается (при перевороте позы на увеличенных объёмах) рыночный ордер и открывается противоположный рыночный на бОльших объёмах в зависимости от схемы доливок. Вот мой рабочий участок кода. Правьте под свои нужды, если у Вас подобный алгоритм экспа. Я толком ничего не понял в Вашем вопросе. Можете вне зависимости от ситуации поинтересоваться в ветке "Любой вопрос новичка...", только подробнее распишите Ваш вопрос, а то ничего (мне, по крайней мере) не понятно - вообще.
П.С. Вы у меня так выманите всего моего боевого робота, с рук которого я щас ем. Работал над ним с перерывами и выходами на соответствующие алгоритмы с сентября 2010 года. См. ветку - Лавина.
Продолжение кода в прицепе, т.к. он больше допустимого размера:
Да. Это мой код. Я же уже писал Вам, что использую его у себе в переворотном мартине следующим образом:
Если крайняя сделка (поза) была закрыта в плюс, то обнуляем количество переворотов (Iteration) и стартуем стартовым лотом, если в минус,
то считаем количество подряд убыточных сделок и открываемся в противоположную сторону увеличенным объёмом.
Это - неттинговая версия Лавины (см. одноимённую ветвь), т.е. закрывается (при перевороте позы на увеличенных объёмах) рыночный ордер и открывается противоположный рыночный на бОльших объёмах в зависимости от схемы доливок. Вот мой рабочий участок кода. Правьте под свои нужды, если у Вас подобный алгоритм экспа. Я толком ничего не понял в Вашем вопросе. Можете вне зависимости от ситуации поинтересоваться в ветке "Любой вопрос новичка...", только подробнее распишите Ваш вопрос, а то ничего (мне, по крайней мере) не понятно - вообще.
П.С. Вы у меня так выманите всего моего боевого робота, с рук которого я щас ем. Работал над ним с перерывами и выходами на соответствующие алгоритмы с сентября 2010 года. См. ветку - Лавина.
я уже обращался в ветку "любой вопрос новичка" и там тишина.
Ситуация в том, что когда данный код закрывает сделку в убыток, то он запоминает минусовой баланс, а когда закрывает сделку в плюс, и при этом плюс меньше баланса, то он обнуляет 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
1. я уже обращался в ветку "любой вопрос новичка" и там тишина.
Ситуация в том, что когда данный код закрывает сделку в убыток, то он запоминает минусовой баланс, а когда закрывает сделку в плюс, и при этом плюс меньше баланса, то он обнуляет Sum_Loss, а мне надо, что бы он не обнулял, а скосил.
2. то есть, сейчас он вот как работает:
проверяет закрытый ордер, если у закрытого ордера профит меньше нуля, то этот профит приплюсовывается к Sum_Loss, и так до тех пор, пока профит открытой сделки не превысит (будет больше) Sum_Loss, при достижении сделка закрывается, и Sum_Loss обнуляется и начинает работать цикл сначала.
3. а мне нужно:
ордер закрылся в минус, его профит минусовой прибавился к 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
1. Обращайтесь ещё раз - там люди обязательно помогут... предварительно выложив в ту ветвь Ваш код... (какой есть)
2. Всё верно, т.к. это базовый алгоритм Лавины.
3. Всё это и расписывайте в новичковской ветке с Вашим кодом этого алгоритма. Люди - поправят. Сами начинайте последовательно и спокойно писать код на мкл4.
Если не справляетесь сами, обращайтесь в раздел "Работа" на пятом форуме - там пишут за еду...
На халяву с нуля код будут писать ТОЛЬКО при наличии личного интереса!
Всё.
Можно выдохнуть... :-)
Пачки ордеров в этот раз... :-) закрыты в профит!
Совы DoublePlus и vse_dlya_sela_J_OsMA_kh + мой вариант (также с описанием ТС) с настройками - в ветке.
Можно выдохнуть... :-)
Пачки ордеров в этот раз... :-) закрыты в профит!
Совы DoublePlus и vse_dlya_sela_J_OsMA_kh + мой вариант (также с описанием ТС) с настройками - в ветке.
а ты сам лично умеешь программировать?
я слабо программирую.
может у тебя получится все же помочь мне завершить код?
Можно выдохнуть... :-)
Пачки ордеров в этот раз... :-) закрыты в профит!
я слабо программирую.
может у тебя получится все же помочь мне завершить код?