Выбрать последний ордер из истории со стоп лос - страница 2

 
Alekseu Fedotov:


Пример, класика


Ну а теперь проверьте эту версию функции в тестере, в режиме визуализация и увидите какой бред в подсчёте
Добавьте в любой советник вашу функцию и моё отображение информации

color ProfitColor,ProfitColorB,ProfitColorS;

void start() {

   if(GetProfitCurrency(Symbol(),-1,Magic)<0) ProfitColor=Red;
   if(GetProfitCurrency(Symbol(),-1,Magic)>0) ProfitColor=LimeGreen;
   if(GetProfitCurrency(Symbol(),-1,Magic)==0)ProfitColor=DarkGray;
   ObjectCreate("Last Profit", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Last Profit", OBJPROP_CORNER, 1);
   ObjectSet("Last Profit", OBJPROP_XDISTANCE, 5);
   ObjectSet("Last Profit", OBJPROP_YDISTANCE, 15);
   ObjectSetText("Last Profit",StringConcatenate("Last Profit: ",DoubleToStr(GetProfitCurrency(Symbol(),-1,Magic),2)),10,"Arial",ProfitColor);

   if(GetProfitCurrency(Symbol(),0,Magic)<0) ProfitColorB=Red;
   if(GetProfitCurrency(Symbol(),0,Magic)>0) ProfitColorB=LimeGreen;
   if(GetProfitCurrency(Symbol(),0,Magic)==0)ProfitColorB=DarkGray;
   ObjectCreate("Last Buy Profit", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Last Buy Profit", OBJPROP_CORNER, 1);
   ObjectSet("Last Buy Profit", OBJPROP_XDISTANCE, 5);
   ObjectSet("Last Buy Profit", OBJPROP_YDISTANCE, 30);
   ObjectSetText("Last Buy Profit",StringConcatenate("Last Buy Profit: ",DoubleToStr(GetProfitCurrency(Symbol(),0,Magic),2)),10,"Arial",ProfitColorB);

   if(GetProfitCurrency(Symbol(),1,Magic)<0) ProfitColorS=Red;
   if(GetProfitCurrency(Symbol(),1,Magic)>0) ProfitColorS=LimeGreen;
   if(GetProfitCurrency(Symbol(),1,Magic)==0)ProfitColorS=DarkGray;
   ObjectCreate("Last Sell Profit", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Last Sell Profit", OBJPROP_CORNER, 1);
   ObjectSet("Last Sell Profit", OBJPROP_XDISTANCE, 5);
   ObjectSet("Last Sell Profit", OBJPROP_YDISTANCE, 45);
   ObjectSetText("Last Sell Profit",StringConcatenate("Last Sell Profit: ",DoubleToStr(GetProfitCurrency(Symbol(),1,Magic),2)),10,"Arial",ProfitColorS);
   }
 
Natalya Dzerzhinskaya:


Ну а теперь проверьте эту версию функции в тестере, в режиме визуализация и увидите какой бред в подсчёте
Добавьте в любой советник вашу функцию и моё отображение информации

color ProfitColor,ProfitColorB,ProfitColorS;

void start() {

   if(GetProfitCurrency(Symbol(),-1,Magic)<0) ProfitColor=Red;
   if(GetProfitCurrency(Symbol(),-1,Magic)>0) ProfitColor=LimeGreen;
   if(GetProfitCurrency(Symbol(),-1,Magic)==0)ProfitColor=DarkGray;
   ObjectCreate("Last Profit", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Last Profit", OBJPROP_CORNER, 1);
   ObjectSet("Last Profit", OBJPROP_XDISTANCE, 5);
   ObjectSet("Last Profit", OBJPROP_YDISTANCE, 15);
   ObjectSetText("Last Profit",StringConcatenate("Last Profit: ",DoubleToStr(GetProfitCurrency(Symbol(),-1,Magic),2)),10,"Arial",ProfitColor);

   if(GetProfitCurrency(Symbol(),0,Magic)<0) ProfitColorB=Red;
   if(GetProfitCurrency(Symbol(),0,Magic)>0) ProfitColorB=LimeGreen;
   if(GetProfitCurrency(Symbol(),0,Magic)==0)ProfitColorB=DarkGray;
   ObjectCreate("Last Buy Profit", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Last Buy Profit", OBJPROP_CORNER, 1);
   ObjectSet("Last Buy Profit", OBJPROP_XDISTANCE, 5);
   ObjectSet("Last Buy Profit", OBJPROP_YDISTANCE, 30);
   ObjectSetText("Last Buy Profit",StringConcatenate("Last Buy Profit: ",DoubleToStr(GetProfitCurrency(Symbol(),0,Magic),2)),10,"Arial",ProfitColorB);

   if(GetProfitCurrency(Symbol(),1,Magic)<0) ProfitColorS=Red;
   if(GetProfitCurrency(Symbol(),1,Magic)>0) ProfitColorS=LimeGreen;
   if(GetProfitCurrency(Symbol(),1,Magic)==0)ProfitColorS=DarkGray;
   ObjectCreate("Last Sell Profit", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Last Sell Profit", OBJPROP_CORNER, 1);
   ObjectSet("Last Sell Profit", OBJPROP_XDISTANCE, 5);
   ObjectSet("Last Sell Profit", OBJPROP_YDISTANCE, 45);
   ObjectSetText("Last Sell Profit",StringConcatenate("Last Sell Profit: ",DoubleToStr(GetProfitCurrency(Symbol(),1,Magic),2)),10,"Arial",ProfitColorS);
   }


Ну Наталья ввела меня старика в сомнения,

П‌роверил 

В‌роде все так,

я‌ вообще то о циклах писал 

 
Alekseu Fedotov:


Ну Наталья ввела меня старика в сомнения,
П‌роверил 

В‌роде все так,
я‌ вообще то о циклах писал 


Первые ордера считаются правильно, а вот далее после закрытия 3-ей и т.д. серии ордеров, с убытком или прибылью, начинается подсчет прибыли с не понятными значениями.
Закроется профит +5, а значение будет например 93, или  закроется убыток - 27, а значение будет например -285 и т.д. Проверьте с закрытием более ордеров.

П‌о циклам что не так?

 

Уважаемые форумчане!

В‌озникла идея добавить в функцию расчета объема позиций условие,если последний ордер закрылся с убытком ,то следующий выставляется с увеличенным коэффициентом.

И чтобы все остальные возвраты из функции тоже работали.Написала вроде,но то один возврат не работает,то другой.

Подскажите,что делаю не так?

 ‌  

                               double GetLot(int type)

                                   {

                                   if(CountOrdersType(type)==0 || LastOrderTypeLots(type)>Max_Lot)

                                  {

                                   if(!Auto_Lot) return(Start_Lot);

                                   return(AccountBalance()*(Lot_Percents/100)*AccountLeverage()/MarketInfo(Symbol(),MODE_LOTSIZE));   }

                        { if(!History) return(Start_Lot);

                            datetime time=0;double lastlot=0;int lastop=0;double prof=0;

                              for(int i=OrdersHistoryTotal()-1;i>=0;i--)

                                  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)&&OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic&&OrderType()<=1)

                       {

                          if(time<OrderCloseTime()){time=OrderCloseTime();lastlot=OrderLots();lastop=OrderType();prof=OrderProfit();}

                        }

                        if(prof < 0 && OrderMagicNumber() == Magic)lot=OrderLots();

                             return(lot * History_Multiplier); }

                             return(LastOrderTypeLots(type)*Lot_Multiplier);

                           }




 
Ирина Минина:

В‌озникла идея добавить в функцию расчета объема позиций условие,если последний ордер закрылся с убытком ,то следующий выставляется с увеличенным коэффициентом.

И чтобы все остальные возвраты из функции тоже работали.Написала вроде,но то один возврат не работает,то другой.

Подскажите,что делаю не так?


Что то тут в вашей функции вообще ни чего не понятно
П‌опробуйте взять профит закрытых ордеров с примера в этой ветке и добавить LotMult в параметры

extern double Lot = 0.1;
extern double LotMult = 2.0;

void start() {

double Lots;
if(LastProfitCL(-1)<0) {Lots=NormalizeDouble(Lot*LotMult,2);} else Lots=Lot;

if(Ваши условия для BUY)  OrderSend(Symbol(),OP_BUY,Lots,Ask,-,-,-,-,-);
if(Ваши условия для SELL) OrderSend(Symbol(),OP_SELL,Lots,Bid,-,-,-,-,-);
 
В общем всё не однозначно. Тему закрывать?
Причина обращения: