помогите с написанием Мартингейла... - страница 2

 
Maksim Neimerik:
Мне нужно найти последний ордер который закрылся в убыток и открыть противоположный....
А что вы подразумеваете под этим выражением найти последний ордер? Мне кажется вам надо определить убыточна ли последняя закрытая позиция.
 
khorosh:
А что вы подразумеваете под этим выражением найти последний ордер? Мне кажется вам надо определить убыточна ли последняя закрытая позиция.
именно так
 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг убыточности последней позиции.                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isLossLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    if (OrderProfit()<0) return(true);
  }
  return(false);
}
Maksim Neimerik
:

именно так

Тогда попробуйте эту функцию:

 

Ничего не получается!!! Опишу свою задачу: есть открытый ордер, если он закроется в минус мне нужно сразу же открыть противоположный ордер с лотом в 2 раза больше чем у предыдущего, стоп лосс должен быть на уровне открытия предыдущего а тейк равен стоп лоссу... Вот то что я намудрил, объясните почему ОНО не работает?!!!

bool MartinOrder()
{
datetime t=0;
{
   for(int i=0; i<=OrdersHistoryTotal(); i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if(OrderSymbol()==Symbol())
         {
            if(OrderType()==OP_BUY)
            {
               if(OrderMagicNumber()==Magic1)           
               {
                  if(OrderProfit()<0)
                  {
                     if(t<OrderCloseTime())
                        t=OrderCloseTime();return(t);
                     {
                        if(t==OrderCloseTime())
                        if(OrderSend(NULL,OP_SELL,(OrderLots()*2),Bid,Slippage,OrderOpenPrice(),(Bid-(OrderOpenPrice()-Bid)),"MartinSell",Magic3,0,Red))
                        Print("MartinSell");  
                     }
                  }
               }
            }
         }
      }
   }
 }
 return(true);
}

 
Maksim Neimerik:

Ничего не получается!!! Опишу свою задачу: есть открытый ордер, если он закроется в минус мне нужно сразу же открыть противоположный ордер с лотом в 2 раза больше чем у предыдущего, стоп лосс должен быть на уровне открытия предыдущего а тейк равен стоп лоссу... Вот то что я намудрил, объясните почему ОНО не работает?!!!

bool MartinOrder()
{
datetime t=0;
{
   for(int i=0; i<=OrdersHistoryTotal(); i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if(OrderSymbol()==Symbol())
         {
            if(OrderType()==OP_BUY)
            {
               if(OrderMagicNumber()==Magic1)           
               {
                  if(OrderProfit()<0)
                  {
                     if(t<OrderCloseTime())
                        t=OrderCloseTime();return(t);
                     {
                        if(t==OrderCloseTime())
                        if(OrderSend(NULL,OP_SELL,(OrderLots()*2),Bid,Slippage,OrderOpenPrice(),(Bid-(OrderOpenPrice()-Bid)),"MartinSell",Magic3,0,Red))
                        Print("MartinSell");  
                     }
                  }
               }
            }
         }
      }
   }
 }
 return(true);
}


Устанавливайте  лимитные ордера на уровень сторлосса.
 
Alekseu Fedotov:

Устанавливайте  лимитные ордера на уровень сторлосса.
Не выйдет, я не пользуюсь стоп лоссами. Ордера закрываются с помощью OrderClose() когда выполняется определенное условие...
 
Maksim Neimerik:
Не выйдет, я не пользуюсь стоп лоссами. Ордера закрываются с помощью OrderClose() когда выполняется определенное условие...


Мож так

  close = OrderClose(...........); 
  if(close)
    {
   ticket = OrderSend(.......);
    }
 
Alekseu Fedotov:


Мож так

Ну вроде неплохо ща попробую...
 
АААААААААААААААААААААААААААААА!!!! РАБОТАЕТ!!!!!!!!!!!!!!
Причина обращения: