GrayRat
GrayRat личный блог
16 апреля 2016, 16:38

Как улучшить прибыльность эксперта MQL5?

Смысл стратегии в двух словах. 
Если с 7-ми до 16 часов было движение более 48 пунктов от максима/минимума цены за период 1-6 часов. Открывать сделку в этом направлении.
На тесте с 2010 года на Евродолларе стратегия показывает прибыль. Но если тестировать с 2003 года — там будут не очень результаты.:(

Есть ли какие-нибудь стандартные ухищрения, чтоб улучшить прибыльность?


#property copyright «ForexMan»
#property link «bergovfx.com»
#include <Tools\DateTime.mqh>

input double Lots=0.1;
input int TakeProfit=59;
input int StopLoss=27;
input int Raznica=48;
CDateTime DT;
int magic_number=555;
bool f;
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}

void OnTick()
{
double High[];
int count=10; // сколько копируем
ArraySetAsSeries(High,true);
CopyHigh(_Symbol,PERIOD_H1,0,count,High);
double Low[];
ArraySetAsSeries(Low,true);
CopyLow(_Symbol,PERIOD_H1,0,count,Low);

DT.DateTime(TimeCurrent());
if(DT.day_of_week==0 || DT.day_of_week==6) return; // в выходные не работаем
if(MQLInfoInteger(MQL_TRADE_ALLOWED)==false) return; // пропустим тик, если терминал занят
double max, min; //максимальная и минимальная цены

// Если 7 утра — открываем сделки на пробой флэта
if(DT.hour==7 && OrdersTotal()==0)

{
// 1. Находим минимум максимуму
max=High[ArrayMaximum(High,1,6)];
min=Low[ArrayMinimum(Low,1,6)];
// max=High[iHighest(NULL,PERIOD_H1,MODE_HIGH,6,1)]; //максимальная цена за последние 6 баров
// min=Low[iLowest(NULL,PERIOD_H1,MODE_LOW,6,1)]; // минимальная цена за последние 6 баров

// 2. Открываем сделку
MqlTradeRequest request={0};
request.action=TRADE_ACTION_PENDING; // установка отложенного ордера
request.magic=magic_number; // ORDER_MAGIC
request.symbol=_Symbol; // инструмент
request.volume=Lots; // объем в 0.1 лот
request.sl=max+Raznica*Point()-StopLoss*Point(); // Stop Loss
request.tp=max+Raznica*Point()+TakeProfit*Point(); // Take Profit
request.type=ORDER_TYPE_BUY_STOP; // тип ордера
request.price=max+Raznica*Point(); //---сформируем цену для отложенного ордера
MqlTradeResult result={0};
f=OrderSend(request,result); //--- отправим торговый приказ
Print(__FUNCTION__,":",result.comment); //--- выведем в лог ответ сервера
if(result.retcode==10016) Print(result.bid,result.ask,result.price);

MqlTradeRequest request1={0};
request1.action=TRADE_ACTION_PENDING; // установка отложенного ордера
request1.magic=magic_number; // ORDER_MAGIC
request1.symbol=_Symbol; // инструмент
request1.volume=Lots; // объем в 0.1 лот
request1.sl=min-Raznica*Point()+StopLoss*Point(); // Stop Loss
request1.tp=min-Raznica*Point()-TakeProfit*Point(); // Take Profit
request1.type=ORDER_TYPE_SELL_STOP; // тип ордера
request1.price=min-Raznica*Point(); //---сформируем цену для отложенного ордера
MqlTradeResult result1={0};
f=OrderSend(request1,result1); //--- отправим торговый приказ
Print(__FUNCTION__,":",result1.comment); //--- выведем в лог ответ сервера
if(result1.retcode==10016) Print(result1.bid,result1.ask,result1.price);

// OrderSend(Symbol(),OP_BUYSTOP,Lots,max+Raznica*Point,3,max+Raznica*Point-StopLoss*Point, max+Raznica*Point+TakeProfit*Point, «My order#»,16384,0,Green);
// OrderSend(Symbol(),OP_SELLSTOP,Lots,min-Raznica*Point,3,min-Raznica*Point+StopLoss*Point, min-Raznica*Point-TakeProfit*Point,«My order#»,16384,0,Blue);
}

// Удаляем ордера в 16.00
if(DT.hour==16)
{
ulong order_ticket;
//--- пройдем по всем отложенным ордерам
for(int i=OrdersTotal()-1;i>=0;i--)
if((order_ticket=OrderGetTicket(i))>0)
//--- ордер с подходящим ORDER_MAGIC
if(magic_number==OrderGetInteger(ORDER_MAGIC))
{
MqlTradeResult result={0};
MqlTradeRequest request={0};
request.order=order_ticket;
request.action=TRADE_ACTION_REMOVE;
f=OrderSend(request,result);
//--- выведем в лог ответ сервера
Print(__FUNCTION__,": ",result.comment," код ответа ",result.retcode);
}
}
}
//+------------------------------------------------------------------+

7 Комментариев
  • helk3rn
    16 апреля 2016, 16:50

    Конечно есть! 

    int OnInit()
     {
      ExpertRemove();
      return(INIT_SUCCEEDED);
     }

  • Федор
    16 апреля 2016, 17:49
    'CDateTime' — declaration without type
  • Федор
    16 апреля 2016, 17:55
    увидел, есть #include <Tools\DateTime.mqh>
  • Андрей К
    16 апреля 2016, 18:56
    не реклама сайта случаем?
  • Федор
    16 апреля 2016, 19:05

    скинул в личку)

  • Dmitry Dobrin
    16 апреля 2016, 21:20
    я тоже замечал, что Америка не любит пропускать сильных движений рынка. И если в европейскую сессию прошла движуха, то в начале американской могут всех свозить назад, а потом по новой.
    Но только на этом факте я бы не строил стратегию. Можно использовать как дополнительный фактор.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн