Блог им. GrayRat

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

    • 16 апреля 2016, 16:38
    • |
    • GrayRat
  • Еще

Смысл стратегии в двух словах. 
Если с 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);
}
}
}
//+------------------------------------------------------------------+

  • Ключевые слова:
  • mql5
96 | ★2
7 комментариев

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

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

avatar
'CDateTime' — declaration without type
avatar
увидел, есть #include <Tools\DateTime.mqh>
avatar
не реклама сайта случаем?
avatar

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

avatar

Федор, спасибо.  Завтра отпишусь что по тестам получится. Тока еще переход на зимнее/летнее время попробую добавить. Думаю стоит.

avatar
я тоже замечал, что Америка не любит пропускать сильных движений рынка. И если в европейскую сессию прошла движуха, то в начале американской могут всех свозить назад, а потом по новой.
Но только на этом факте я бы не строил стратегию. Можно использовать как дополнительный фактор.
avatar

Читайте на SMART-LAB:
Фото
Эксперт RENI назвал опасные ошибки при строительстве и ремонте
При строительстве или ремонте желание максимально оптимизировать расходы — норма. Однако некоторые способы экономии могут обернуться серьезными...
Геополитика и рубль: как это повлияет на ваши инвестиции?
Цены на нефть могут удвоиться? Какие геополитические сценарии стоит предусмотреть заранее? Как все это отразится на российском рынке? Провели блиц...
Фото
Почему прозрачность бизнеса важна для публичной компании
📊 Публичный статус компании — это не только доступ к капиталу, но и обязательство регулярно раскрывать информацию о своей деятельности....
Фото
Сколько миллиардов заработает Ренессанс страхование на снижении процентных ставок?
Стоимость акций Ренессанс страхование продемонстрировала значительную коррекцию на 35% относительно пиковых показателей весны 2025 года. На мой...

теги блога GrayRat

....все тэги



UPDONW
Новый дизайн