AVPetrovich

 
Уровень 7

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


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

Рейтинг 2146



РЕКОМЕНДУЮ



Стратегия для МТ5

Андрей добрый день
Можно написать советник для МТ5?
Что то похожие вы уже писали
Две валютных пары
1.Пре включении советник выставляет бай по рынку на первую валютную пару лот 1. Если идет в плюс закрываем профитом.
2.Идет в минус, на расстоянии 20 пунктов открываем селл 0,5.
3.Открываем бай на вторую пару лот 1 если идем в плюс закрываем все ордера по первой и второй паре.
4.Вторая пара едет тоже в минус также ее хеджируем селл 0,5.
5.Если получилось что две пары за хеджировались, ждем когда одна из пар выйдет в плюс закроем её профитом и откроем по ней же сделку бай.
  • 0
  • Просмотров: 1763
  • 28 августа 2024, 20:28
  • AVPetrovich
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
закрытие по профиту идет когда?

1. общий профит по обеим парам
2. профит по одной из пар

так?

какие условия для открытия позиции по паре?
Редактирован: 29 августа 2024, 09:53
avatar

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

  • 29 августа 2024, 09:51
+
0
1.да
2.да
условия открытия просто включение советника
avatar

  7  AVPetrovich Автор Сообщений: 187

  • 29 августа 2024, 10:08
+
+1
avatar

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

  • 29 августа 2024, 11:38
+
0
Спасибо за работу.
Маленькая не точность. Советник хеджирует ордерами бай.
Если будет Хеджировать ордерами селл будет очень.
Последовательность сделок сначала на первой валютной паре, потом на второй.
Вторая пара включается когда на первое сработал хеджирующий лот.
Если будет время поправить буду очень признателен.

avatar

  7  AVPetrovich Автор Сообщений: 187

  • 29 августа 2024, 12:57
+
0
Если будет Хеджировать ордерами селл будет очень.

в тз про селл нет ни слова
avatar

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

  • 30 августа 2024, 09:57
+
0
2.Идет в минус, на расстоянии 20 пунктов открываем селл 0,5.
4.Вторая пара едет тоже в минус также ее хеджируем селл 0,5.
Если врямя будет*stesnitelno* 
Редактирован: 30 августа 2024, 10:02
avatar

  7  AVPetrovich Автор Сообщений: 187

  • 30 августа 2024, 10:00
+
0
Последовательность сделок сначала на первой валютной паре, потом на второй.
Вторая пара включается когда на первое сработал хеджирующий лот.


сделал:


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

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

//--- входные параметры группы 1
input double   Lot1      = 1;         // лот 1
input double   Lot2      = 0.5;       // лот 2
input double   Profit    = 11;        // Профит в валюте

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

input int      Step      = 333;       // шаг
input int      Slip      = 30;        // Проскальзывание

CTrade trade;                         // Используем торговый класс CTrade
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

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

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetString(POSITION_SYMBOL)==symb || PositionGetString(POSITION_SYMBOL)==NULL)
           {
            p+=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
           }
        }
     }

   return(p);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades(string symb)
  {
   int count=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetString(POSITION_SYMBOL)==symb || PositionGetString(POSITION_SYMBOL)==NULL)
           {
            if(OrderGetInteger(ORDER_TYPE)<2)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastBuyPrice(string symb)
  {
   double pr=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)) && PositionGetInteger(POSITION_TYPE)==0)
        {
         if(PositionGetString(POSITION_SYMBOL)==symb)
           {
            pr=PositionGetDouble(POSITION_PRICE_OPEN);
            break;
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|  Position Profit                                                 |
//+------------------------------------------------------------------+
int PositionType(string symb)
  {
   int type=8;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetString(POSITION_SYMBOL)==symb)
           {
            type=(int)PositionGetInteger(POSITION_TYPE);
            break;
           }
        }
     }
   return(type);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trade(string symb)
  {
   double pr=0;
   double ask=SymbolInfoDouble(symb,SYMBOL_ASK);
   double bid=SymbolInfoDouble(symb,SYMBOL_BID);
   int dg=(int)SymbolInfoInteger(symb,SYMBOL_DIGITS);
   double pp=SymbolInfoDouble(symb,SYMBOL_POINT);

   if(CountTrades(Symb1)<1)
     {
      pr=NormalizeDouble(ask,dg);
      trade.Buy(Lot1,Symb1,pr,0,0,"");
     }

   if(CountTrades(Symb2)<1 && CountTrades(Symb1)>1)
     {
      pr=NormalizeDouble(ask,dg);
      trade.Buy(Lot1,Symb2,pr,0,0,"");
     }

   if(CountTrades(symb)>0 && CountTrades(symb)<2)
     {
      if(PositionType(symb)==0 && (FindLastBuyPrice(symb)-ask)/pp>=Step)
        {
         trade.Buy(Lot2,symb,ask,0,0);
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(Symb1!="")
      Trade(Symb1);

   if(Symb2!="")
      Trade(Symb2);

   if(AllProfit(NULL)>Profit)
      CloseAll(NULL);

   if(AllProfit(Symb1)>Profit)
      CloseAll(Symb1);

   if(AllProfit(Symb2)>Profit)
      CloseAll(Symb2);
  }
//+------------------------------------------------------------------+



но так хуже идет:

avatar

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

  • 30 августа 2024, 10:02
+
0
Сейчас он выставляет только ордера бай, поэтому не идет.
Идет в минус, на расстоянии 20 пунктов открываем селл 0,5.
avatar

  7  AVPetrovich Автор Сообщений: 187

  • 30 августа 2024, 10:31
+
0
avatar

  7  AVPetrovich Автор Сообщений: 187

  • 30 августа 2024, 10:37
+
0
Можете уточнить дальнейшие шаги: если 0.5 селл сработал и цена пошла вверх.
Ждём отработку бай 1 и селл 0.5?
avatar

  18  Boris54 Сообщений: 810 - ПенSионер

  • 31 августа 2024, 02:15
+
0
Если такая ситуация случается на двух парах тогда да.
avatar

  7  AVPetrovich Автор Сообщений: 187

  • 31 августа 2024, 17:10
+
0
Сейчас он выставляет только ордера бай, поэтому не идет.
Идет в минус, на расстоянии 20 пунктов открываем селл 0,5.


сделаю продажи сегодня, но так он еще хуже пойдет я думаю
Редактирован: 2 сентября 2024, 10:00
avatar

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

  • 2 сентября 2024, 09:58

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