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

Рейтинг 2146



РЕКОМЕНДУЮ



Доработать советник

Добрый день.
Прошу в советник на странице zakaz.opentraders.ru/61105.html#comment159281 с открытием позиций добавить одновременное выставление стоповых ордеров для всех трех символов.
В настройки вынести:
-расстояние до первого ордера;
-шаг между ордерами;
-кол-во ордеров;
  • 0
  • Просмотров: 1821
  • 25 сентября 2021, 14:47
  • ssg
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

Брокер для ваших роботов, 15 лет на рынке

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

+
0
на 28-е
avatar

  35  AM2 Сообщений: 16276 - Андрей

  • 25 сентября 2021, 19:37
+
0
добавить одновременное выставление стоповых ордеров
этот момент подробнее пожалуйста.
avatar

  35  AM2 Сообщений: 16276 - Андрей

  • 28 сентября 2021, 00:49
+
0
В настоящий момент советник только открывает позиции:
if(Symb1!="")
        {
         if(ZZPrice(0)>ZZPrice(1) && b)
           {
            trade.PositionOpen(Symb1,1,Lot(Symb1),Bid1,0,0);
            trade.PositionOpen(Symb2,0,Lot(Symb2),Ask2,0,0);
            trade.PositionOpen(Symb3,0,Lot(Symb3),Ask3,0,0);
            b=0;
            s=1;
           }
         if(ZZPrice(0)<ZZPrice(1) && s)
           {
            trade.PositionOpen(Symb1,0,Lot(Symb1),Ask1,0,0);
            trade.PositionOpen(Symb2,1,Lot(Symb2),Bid2,0,0);
            trade.PositionOpen(Symb3,1,Lot(Symb3),Bid3,0,0);
            s=0;
            b=1;
           }
        }
      bars=Bars(NULL,0);
     }

Необходимо к позициям дописать выставление сети стопордеров для каждого символа.
Если пара в бай, то выставляется дополнительно сеть байстоп ордеров.
Если пара в селл, то выставляется дополнительно сеть селлстоп ордеров.
Т.е. получиться мультивалютный гридер на основе выбранных пар.
avatar

  16  ssg Автор Сообщений: 817

  • 28 сентября 2021, 04:38
+
0
вы дали ссылку на нерабочий советник
avatar

  35  AM2 Сообщений: 16276 - Андрей

  • 28 сентября 2021, 22:36
+
0
покажите все операции пошагово на скринах, т.к. у вас совершенно другая логика
avatar

  35  AM2 Сообщений: 16276 - Андрей

  • 28 сентября 2021, 23:20
+
0
Спасибо, заказ снимается.Переделал сам по аналогии с другими советниками из базы.
В замен прошу переписать советник zakaz.opentraders.ru/56747.html www.opentraders.ru/downloads/2879/ с mql4 на mql5
И добавить обязательно проверку на исполнение приказов.
Редактирован: 29 сентября 2021, 15:12
avatar

  16  ssg Автор Сообщений: 817

  • 29 сентября 2021, 15:09
+
0
Интересно глянуть хеджирующего советника на отложенных ордерах.
Следил за вашей темой.
Не выложите? Если конечно не секрет.
avatar

  14  OSS5 Сообщений: 149

  • 29 сентября 2021, 15:36
+
0
Конечно не секрет. Пользуйтесь:

//+------------------------------------------------------------------+
//|                                             Mult2+stoporders.mq5 |
//|                                              Copyright 2021, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"

#include <Trade\Trade.mqh>            // Подключаем торговый класс CTrade

//--- входные параметры группы 1
input double   Lots      = 0.1;       // лот
input double   KLot      = 2;         // множитель лота
input double   MaxLot    = 5;         // максимальный лот
input double   Loss      = 3000;      // Лось в валюте
input double   Profit    = 100;       // Профит в валюте

input string   Symb1     = "EURUSD";  // 1-й символ
input string   Symb2     = "GBPUSD";  // 2-й символ
input string   Symb3     = "EURGBP";  // 3-й символ

input int      Count     = 3;     // число ордеров
input int      Delta     = 200;   // расстояние от цены
input int      Slip      = 50;        // Проскальзывание

input string IndName     = "Examples\\Moving Average";
input int MA1            = 12;
input int MA2            = 36;

int bars=0;
CTrade trade;
int m1=0,m2=0;
double ma1[],ma2[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   m1=iMA(Symb1,0,MA1,0,0,0);
   m2=iMA(Symb1,0,MA2,0,0,0);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll()
  {
   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         trade.PositionClose(PositionGetTicket(i),Slip);
        }
     }
  }
//+------------------------------------------------------------------+
//|  Position Profit                                                 |
//+------------------------------------------------------------------+
double AllProfit()
  {
   double p=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         p+=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
        }
     }
   return(p);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades(string sm)
  {
   int count=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetString(POSITION_SYMBOL)==sm)
           {
            if(OrderGetInteger(ORDER_TYPE)<2)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Лот                                                              |
//+------------------------------------------------------------------+
double Lot(string sm)
  {
   double lots=Lots;

   lots=NormalizeDouble(Lots*MathPow(KLot,CountTrades(sm)),2);

   if(lots>MaxLot)
      lots=Lots;
   if(lots<0.1)
      lots=0.1;

   return(lots);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double Ask1=SymbolInfoDouble(Symb1,SYMBOL_ASK);
   double Ask2=SymbolInfoDouble(Symb2,SYMBOL_ASK);
   double Ask3=SymbolInfoDouble(Symb3,SYMBOL_ASK);

   double Bid1=SymbolInfoDouble(Symb1,SYMBOL_BID);
   double Bid2=SymbolInfoDouble(Symb2,SYMBOL_BID);
   double Bid3=SymbolInfoDouble(Symb3,SYMBOL_BID);
   
   double Point1=SymbolInfoDouble(Symb1,SYMBOL_POINT);
   double Point2=SymbolInfoDouble(Symb2,SYMBOL_POINT);
   double Point3=SymbolInfoDouble(Symb3,SYMBOL_POINT);

   ArraySetAsSeries(ma1,true);
   ArraySetAsSeries(ma2,true);
   CopyBuffer(m1,0,0,2,ma1);
   CopyBuffer(m2,0,0,2,ma2);

   if(bars!=Bars(NULL,0))
     {
      if(AllProfit()>Profit || AllProfit()<-Loss)
         CloseAll();

      if(Symb1!="")
        {
         if(ma1[0]>ma2[0] && ma1[1]<ma2[1])
           {
            trade.PositionOpen(Symb1,1,Lot(Symb1),Bid1,0,0);
            for(int i=1;i<=Count;i++) trade.SellStop(Lots,Bid1-Delta*Point1*i,Symb1);
            trade.PositionOpen(Symb2,0,Lot(Symb2),Ask2,0,0);
            for(int i=1;i<=Count;i++) trade.BuyStop(Lots,Bid2+Delta*Point2*i,Symb2);
            trade.PositionOpen(Symb3,0,Lot(Symb3),Ask3,0,0);
            for(int i=1;i<=Count;i++) trade.BuyStop(Lots,Bid3+Delta*Point3*i,Symb3);
           }
         if(ma1[0]<ma2[0] && ma1[1]>ma2[1])
           {
            trade.PositionOpen(Symb1,0,Lot(Symb1),Ask1,0,0);
            for(int i=1;i<=Count;i++) trade.BuyStop(Lots,Bid1+Delta*Point1*i,Symb1);
            trade.PositionOpen(Symb2,1,Lot(Symb2),Bid2,0,0);
            for(int i=1;i<=Count;i++) trade.SellStop(Lots,Bid2-Delta*Point2*i,Symb2);
            trade.PositionOpen(Symb3,1,Lot(Symb3),Bid3,0,0);
            for(int i=1;i<=Count;i++) trade.SellStop(Lots,Bid3-Delta*Point3*i,Symb3);
           }
        }
      bars=Bars(NULL,0);
     }

   Comment("\n Lot : ",Lot(_Symbol),
           "\n Profit : ",AllProfit());
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

avatar

  16  ssg Автор Сообщений: 817

  • 29 сентября 2021, 16:04
+
0
Спасибо.
avatar

  14  OSS5 Сообщений: 149

  • 29 сентября 2021, 16:53
+
0
avatar

  35  AM2 Сообщений: 16276 - Андрей

  • 1 октября 2021, 17:37
+
0
Спасибо Андрей!
avatar

  16  ssg Автор Сообщений: 817

  • 1 октября 2021, 18:34

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