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

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

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

 
Maksim Grinkevich:

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

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

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

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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();
     }

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

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

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

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

 

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

Причина обращения: