Группа "Стол заказов MQL"

Рейтинг 2087



РЕКОМЕНДУЮ



Заказ на советник на платформу МТ4 (Торговля на D1, платформа МТ4)

Добрый день.
Хотел бы заказать у Вас бесплатно (т.к. к сожалению на платный заказ денег нет) робота под мою стратегию.

Платформа МТ4

Суть работы объясню на графике периода ДЕНЬ.
Работать робот будет по отложеым ордерам.
1. После того как появилась свеча нового дня, робот выставляет от верхней грани свечи за прошлый день buy stop (отложенный ордер покупки) и от нижней грани свечи sell stop (отложенный ордер продажи), на расстояние, которое можно будет указывать в настройках робота.
2. Стоп лоссы устанавливаются роботом автоматически, для buy ордера это цена открытия парного sell ордера, для sell ордера — цена открытия парного buy ордера.
3. При закрытии открытого ордера в прибыль, парный ордер, открытый по этой же свече роботом удаляется (к примеру ордер за 19.08 на продажу закрылся в плюс, тогда ордер на покупку просто удаляется)
4. При закрытии открытого ордера в минус, парный ордер, открытый по этой же свече роботом НЕ удаляется (к примеру ордер за 19.08 на продажу закрылся в минус, тогда ордер на покупку НЕ удаляется, а просто остаётся)
5. Что необходимо вынести в табличку настройки советника:
— расстояние, на котором будут открываться отложенные ордера от верхней и нижней грани свечи (можно одним параметром, т.к. они всегда будут одинакового значения для обоих ордеров)
— Количество пунктов Тейк профит (можно одним параметром, т.к. они всегда будут одинакового значения для обоих ордеров)
— Размер Лота
— Магик номер

Робота прошу назвать SPIRIT

Вроде всё. Если есть какие то вопросы, с радостью отвечу.
Возможно есть какие то советы по вынесению параметров и идее доработки, тоже с радостью выслушаю, возможно я что то и упустил (но насколько помню вроде всё написал).
Буду ждать от Вас ответа.
Спасибо.
  • 0
  • Просмотров: 3608
  • 20 сентября 2015, 13:41
  • FashTsar
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
Завтра займусь. Помню я такой делал для МТ5 :) 
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 20 сентября 2015, 14:46
+
0
Вот набросок советника:


//+------------------------------------------------------------------+
//|                                                       Spirit.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property description "Simple expert advisor"

#include <stdlib.mqh>

//--- Inputs
extern int    StopLoss      = 500; //стоплосс отложенного ордера(если 0 то на предыдущий хай или лоу)
extern int    TakeProfit    = 500; //тейкпрофит  отложенного ордера
extern int    Delta         = 100; //расстояние от лоу или хая
extern int    Expiration    = 24;  //время истечения ордера в часах
extern double Lots          = 0.1; //лот
extern int    Slip          = 3;   //проскальзывание
extern int    Count         = 1;   //количество ордеров
extern int    Magic         = 123; //магик


int res,err;
double sl,tp;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   Comment("");
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountBuyStopOrders()
  {
   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_BUYSTOP)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountSellStopOrders()
  {
   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_SELLSTOP)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double fND(double d,int n=-1)
  {
   if(n<0) return(NormalizeDouble(d, Digits));
   return(NormalizeDouble(d, n));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del=true;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUYSTOP) del=OrderDelete(OrderTicket());
            if(OrderType()==OP_SELLSTOP) del=OrderDelete(OrderTicket());
            if(del==false)
              {
               err=GetLastError();
               Print("ОШИБКА УДАЛЕНИЯ ОРДЕРА: ",err,"(",ErrorDescription(err),")");
                 } else {
               RefreshRates();
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
int LastDealResult()
  {
   int result=0;
   if(OrdersHistoryTotal()==0)
     {
      result=0;
     }

   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
        {
         if(OrderProfit()>0)
           {
            result=1;//tp  
           }
         if(OrderProfit()<0)
           {
            result=2;//sl  
           }
        }
     }
   return(result);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOtlOrder()
  {
   double price;
   double ASK=MarketInfo(NULL,MODE_ASK);
   double BID=MarketInfo(NULL,MODE_BID);
//--- sellstop 
   if(BID>iLow(Symbol(),PERIOD_D1,1))
     {
      if(CountSellStopOrders()<1)
        {
         price=fND(iLow(Symbol(),PERIOD_D1,1)-Delta*Point);
         if(StopLoss==0) sl=fND(iHigh(Symbol(),PERIOD_D1,1));  else sl=price+StopLoss*Point;
         if(TakeProfit==0) tp=0; else tp=price-TakeProfit*Point;
         res=OrderSend(Symbol(),OP_SELLSTOP,Lots,fND(price),0,fND(sl),fND(tp),"ОРДЕР SELLSTOP",Magic,TimeCurrent()+60*60*Expiration,Red);
         if(res<0)
           {
            err=GetLastError();
            Print("ОШИБКА ВЫСТАВЛЕНИЯ ОРДЕРА SELLSTOP: ",err,"(",ErrorDescription(err),")");
              } else {
            RefreshRates();
           }
        }
     }
//--- buystop 
   if(ASK<iHigh(Symbol(),PERIOD_D1,1))
     {
      if(CountBuyStopOrders()<1)
        {
         price=fND(iHigh(Symbol(),PERIOD_D1,1)+Delta*Point);
         if(StopLoss==0) sl=fND(iLow(Symbol(),PERIOD_D1,1)); else sl=price-StopLoss*Point;
         if(TakeProfit==0) tp=0; else tp=price+TakeProfit*Point;
         res=OrderSend(Symbol(),OP_BUYSTOP,Lots,fND(price),Slip,fND(sl),fND(tp),"ОРДЕР BUYSTOP",Magic,TimeCurrent()+60*60*Expiration,Blue);
         if(res<0)
           {
            err=GetLastError();
            Print("ОШИБКА ВЫСТАВЛЕНИЯ ОРДЕРА BUYSTOP: ",err,"(",ErrorDescription(err),")");
              } else {
            RefreshRates();
           }
        }
     }

   return;
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<Count) PutOtlOrder();
   if(LastDealResult()==1) DelOrder();

   Comment("\n Count Orders ");
  }
//+------------------------------------------------------------------+



avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 20 сентября 2015, 18:49
+
0
Да, на МТ5 Вы такой уже делали:) 
Буду очень признателен если и на МТ4 сделаете.)
avatar

  4  FashTsar Автор Сообщений: 101

  • 21 сентября 2015, 20:57
+
0
Буду очень признателен если и на МТ4 сделаете.)
Cмотрели код постом выше?
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 22 сентября 2015, 10:53
+
0
Да. Это уже окончательный вариант?
Могу его использовать?
avatar

  4  FashTsar Автор Сообщений: 101

  • 22 сентября 2015, 17:35
+
0
Вариант предварительный, только что из печки :) 
Я для этого и выложил, чтобы пробовали.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 22 сентября 2015, 17:41
+
0
Потестил советника, всё вроде так, но как я понял, открывая отложенные ордера на след день он прошлые удаляет?
По задумке все отложенные ордера должны оставаться (в итоге должна получиться своеобразная сетка как на скрине)

И удаляться отложенный ордер должен только если парный ордет по профиту закрылся в плюс.
Так можно сделать?
avatar

  4  FashTsar Автор Сообщений: 101

  • 22 сентября 2015, 20:18
+
0
Завтра поправлю.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 22 сентября 2015, 21:57
+
0
Спасибо:) 
avatar

  4  FashTsar Автор Сообщений: 101

  • 22 сентября 2015, 23:18
+
0
Похоже на правду? :)  www.opentraders.ru/downloads/876/

avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 23 сентября 2015, 11:48
+
0
Вроде всё так:) 
Спасибо большое:) 
avatar

  4  FashTsar Автор Сообщений: 101

  • 23 сентября 2015, 22:16

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