AM2
Андрей

 
Уровень 34

  Торгую в компаниях:


Группа "Программирование на MQL"

Рейтинг 280



Проверка торговой стратегии

Когда в первый раз увидел данную стратегию, очень засомневался в ее граальности. Сегодня решил проверить.
Составил небольшое ТЗ:

1. На уровне закрытия американской сессии выставляем лимитные ордера.
2. Если цена прошла Delta пунктов вверх бай лимит, если вниз селл лимит.
3. Если получаем лося, то на уровне открытия ордера, выставляем противоположный лимитник.





Перепробовал несколько вариантов.

Вывод такой: Положительный результат может быть получен только подгонкой на истории.
Система не дает положительного форвард результата.
Может у вас что получится? :) 


//+------------------------------------------------------------------+
//|                                                       Europe.mq4 |
//|                                            Copyright © 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Forex Expert advisor"

//--- Inputs
extern int StopLoss     = 200; // стоп лосс ордера
extern int TakeProfit   = 400; // тейк профит ордера
extern int Delta        = 100; // расстояние от вершин
extern double Lots      = 0.1; // объем позиции
extern int Expiration   = 14;  // время истечения ордера
extern int MAGIC        = 333; // магик
/*
1. На уровне закрытия американской сессии выставляем лимитные ордера
2. Если цена прошла Delta пунктов вверх бай лимит, если вниз селл лимит
3. Если получаем лося, то на уровне открытия ордера, выставляем противоположный лимитник
*/
//----
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void PutOrder()
  {
   int    res,b,s;
//--- get value
   double price;
   double DayOpen=iOpen(Symbol(),PERIOD_D1,0);
   datetime expiration = TimeCurrent()+3600*Expiration;
   Comment("\nDay Open Price ",DayOpen,
           "\nPrice ",Price());
      
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if(OrderType()==OP_BUYLIMIT)b++;
         if(OrderType()==OP_SELLLIMIT)s++; 
        }
      }
    } 
                          
   //--- sell 
   if(DayOpen-Bid>=Delta*Point && s<1)
    {
     price=DayOpen;
     res=OrderSend(Symbol(),OP_SELLLIMIT,Lots,price,3,price+StopLoss*Point,price-TakeProfit*Point,"",MAGIC,expiration,Red);
     return;
    }    
   //--- buy
   if(Ask-DayOpen>=Delta*Point && b<1)
    {
     price=DayOpen;
     res=OrderSend(Symbol(),OP_BUYLIMIT,Lots,price,3,price-StopLoss*Point,price+TakeProfit*Point,"",MAGIC,expiration,Blue);
     return;
    }
    
   //--- sell 
   if(Price()>0 && Type()==0 && s<1)
    {
     price=Price();
     res=OrderSend(Symbol(),OP_SELLLIMIT,Lots,price,3,price+StopLoss*Point,price-TakeProfit*Point,"",MAGIC,expiration,Red);
     return;
    }    
   //--- buy
   if(Price()>0 && Type()==1 && b<1)
    {
     price=Price();
     res=OrderSend(Symbol(),OP_BUYLIMIT,Lots,price,3,price-StopLoss*Point,price+TakeProfit*Point,"",MAGIC,expiration,Blue);
     return;
    }                                  
  }
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del; 
   for (int i=OrdersTotal()-1; i>=0; i--) 
    {
     if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
     if (OrderType()==OP_BUYLIMIT)  del=OrderDelete(OrderTicket()); 
     if (OrderType()==OP_SELLLIMIT) del=OrderDelete(OrderTicket());       
    }    
  }
//+------------------------------------------------------------------+
bool NewBar()
  {
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
    {
     lastbar=curbar;
     return (true);
    }
   else
    {
     return(false);
    }
  }
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
          count++;
        }
      }
    }
    return(count);
  }
//+------------------------------------------------------------------+
double Price()
  { 
   double pr;             
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))      
     {                                       
      if(OrderProfit()<=0)
        {
         pr=OrderOpenPrice(); 
        }
     }            
   return(pr);
  }  
//+------------------------------------------------------------------+
int Type()
  { 
   int type;             
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))      
     {                                       
      if(OrderProfit()<=0)
        {
         if(OrderType()==OP_BUY)   type=0;
         if(OrderType()==OP_SELL)  type=1;  
        }
     }            
   return(type);
  }  
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
   if(NewBar()==true)
    {    
     if(CountTrades()<1)PutOrder();
     //if(CountTrades()>0)DelOrder();
    }
//---
  }
//+------------------------------------------------------------------+

  • +3
  • Просмотров: 9258
  • 4 декабря 2014, 21:21
  • AM2
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Программирование на MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
22 ноября 2014
04 мая 2015

Комментарии (2)

+
+2
На тестере сова показала при депозите 500, пара USD\JPY за этот год, expiration — 9






На евродолларе просадка, вообще надо поработать с настройками
avatar

  19  lorik Сообщений: 357 - Лариса

  • 5 декабря 2014, 08:15
+
0
Тебе нужно загрузить котировки полученные результаты могут быть неверны. Для этого нужно в терминале зайти в сервис нажать архив котировок выбрать пару на которой тестишь выбрать м1 и нажать загрузить. После этого тестируй процент смоделированных тиков должен быть 90%
avatar

  13  Buff Сообщений: 401 - Артем

  • 5 декабря 2014, 21:48

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