Как установить шаг усреднение

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Maksim Grinkevich
23
Maksim Grinkevich  
Всем привет. Как прописать следующий момент. Чтобы в "н" ценовой области открывались сделки одним лотом (по сигналу), а при достижении "н" просадки от самого крайнего ордера, сделки открывались увеличенным лотом?
Andrei Fandeev
36133
Andrei Fandeev  
Maksim Grinkevich:
Всем привет. Как прописать следующий момент. Чтобы в "н" ценовой области открывались сделки одним лотом (по сигналу), а при достижении "н" просадки от самого крайнего ордера, сделки открывались увеличенным лотом?
Вот в точности так как Вы написали текстом - только кодом.
Maksim Grinkevich
23
Maksim Grinkevich  

Исчерпывающе)) Я могу только шаг сетки прописать. А вот чтобы в определенном диапазоне работал один лот, вне зависимости сколько сделок и насколько (допустимо) просела самая невыгодная позиция... усреднения должны включаться, только при определенной просадке в пунктах от самой крайней, не получается нифига(

Andrei Fandeev
36133
Andrei Fandeev  
Maksim Grinkevich:

Исчерпывающе)) Я могу только шаг сетки прописать. А вот чтобы в определенном диапазоне работал один лот, вне зависимости сколько сделок и насколько (допустимо) просела самая невыгодная позиция... усреднения должны включаться, только при определенной просадке в пунктах от самой крайней, не получается нифига(

Разберите Ваше предложение (ТЗ) на составляющие (функции)
И по одной решайте.
<<< при достижении "н" просадки от самого крайнего ордера, сделки открывались увеличенным лотом>>>
тут ведь только две функции нужно закодить.
1. найти "крайний ордер"
2. найди дистанцию от текущей цены до цены открытия этого ордера.
каждая из них решается очень легко
Andrey Kornishkin
9945
Andrey Kornishkin  

Вот блок интересующих вас функций:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int FindOrderType()
  {
   int oticket,ticketNumber=0,type=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               type=OrderType();
              }
           }
        }
     }
   return(type);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastBuyPrice()
  {
   int oticket,ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==Magic)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               oprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oprice);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastSellPrice()
  {
   int oticket,ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==Magic)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               oprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oprice);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   if(CountTrades()>0) lot=NormalizeDouble(Lots*MathPow(KLot,CountTrades()),2);
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }

И реализация в онтик:

   int otype=FindOrderType();

   if((CountTrades()<1 && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin) && BuySell==1) || (CountTrades()<=MaxTrades && otype==0 && (FindLastBuyPrice()-Ask)/Point>=Step))
     {
      PutOrder(0,Ask);
      ModifyOrders();
     }

   if((CountTrades()<1 && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin) && BuySell==2) || (CountTrades()<=MaxTrades && otype==1 && (Bid-FindLastSellPrice())/Point>=Step))
     {
      PutOrder(1,Bid);
      ModifyOrders();
     }

Также наберите в поиске: усреднитель видео, там есть подробный урок.

Maxim Kuznetsov
13788
Maxim Kuznetsov  
Maksim Grinkevich:
Всем привет. Как прописать следующий момент. Чтобы в "н" ценовой области открывались сделки одним лотом (по сигналу), а при достижении "н" просадки от самого крайнего ордера, сделки открывались увеличенным лотом?

lot = экспонента от просадки * K

K считается от возможностей депо и вероятностых(статистических) характеристик стратегии

Maksim Grinkevich
23
Maksim Grinkevich  

Спасибо всем огромное за вашу отзывчивость!!!

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий