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

Рейтинг 2146



РЕКОМЕНДУЮ



Мультивалютный советник для МТ5 .

Добрый день.
Прошу написать советник для МТ5 по следующей стратегии.
Сигналы для открытия позиций по символам EURUSD и GBPUSD берутся после анализа поведения индекса доллара _DXY и кросса EURGBP.
Основные условия и правила оформил в виде кода для МТ4, мне показалось, что так будет информативнее и понятнее:

//+------------------------------------------------------------------+
//|                      Мультивалютный на индексе _DXY & кроссе.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                          http://www.mункцql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mункцql5.com"
#property version   "1.00"
#property strict

extern string Symb_1 = "EURUSD";
extern double Lot_1  = 0.01;
extern int StopLoss_1   = 0;                  
extern int TakeProfit_1 = 0;  
                
extern string Symb_2 = "GBPUSD";
extern double Lot_2  = 0.01;
extern int StopLoss_2   = 0;                 
extern int TakeProfit_2 = 0;                  

extern string Symb_3 = "_DXY";
extern string Symb_4 = "EURGBP";

extern ENUM_TIMEFRAMES Tf = PERIOD_H1;
extern int MAPeriod = 5;

extern ENUM_TIMEFRAMES Tf_1 = PERIOD_H1;
extern int MAPeriod_1 = 5;

extern int Shft_1   = 1;
extern int Magic    = 1221;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  double sl_1=0, tp_1=0;
  double sl_2=0, tp_2=0;
  
  double ask_1=MarketInfo(Symb_1, MODE_ASK);
  double bid_1=MarketInfo(Symb_1, MODE_BID);
  double point_1=MarketInfo(Symb_1, MODE_POINT);
  
  double ask_2=MarketInfo(Symb_2, MODE_ASK);
  double bid_2=MarketInfo(Symb_2, MODE_BID);
  double point_2=MarketInfo(Symb_2, MODE_POINT);
    
  int    bs=GetTradeSignal();
//-----
   if(CountTrades(Symb_1)<1)
   {
    if (bs==1) {
          if (StopLoss_1!=0) sl_1=bid_1-StopLoss_1*point_1;
          if (TakeProfit_1!=0) tp_1=ask_1+TakeProfit_1*point_1;
          OpenPosition(Symb_1, OP_BUY, sl_1, tp_1);
          }
    if (bs==-1) {
         if (StopLoss_1!=0) sl_1=ask_1+StopLoss_1*point_1;
         if (TakeProfit_1!=0) tp_1=bid_1-TakeProfit_1*point_1;
         OpenPosition(Symb_1, OP_SELL, sl_1, tp_1);
    }
  } 
//-----
   if(CountTrades(Symb_2)<1)
   {
     if (bs==2) {
          if (StopLoss_2!=0) sl_2=bid_2-StopLoss_2*point_2;
          if (TakeProfit_2!=0) tp_2=ask_2+TakeProfit_2*point_2;
          OpenPosition(Symb_2, OP_BUY, sl_1, tp_1);
    }
    if (bs==-2) {
          if (StopLoss_2!=0) sl_1=ask_2+StopLoss_2*point_2;
          if (TakeProfit_2!=0) tp_1=bid_2-TakeProfit_2*point_2;
          OpenPosition(Symb_2, OP_SELL, sl_2, tp_2);
    }
  }
 }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type=-1,string symb=NULL){
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==symb && OrderMagicNumber()==Magic){
            if(OrderType()==type || type==-1)
               count++;
           }
        }
     }
   return(count);
  } 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades(string symb){
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==symb && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+----------------------------------------------------------------------------+
//|  Возвращает торговый сигнал:                                               |
//|     2 - купить  Symb_2                                                     |
//|     1 - купить  Symb_1                                                     |
//|     0 - ничего не делать                                                   |
//|    -1 - продать  Symb_1                                                    |
//|    -2 - продать  Symb_2                                                    |
//|  Параметры:                                                                |
//|    sym - наименование инструмента ("" - текущий символ)                    |
//|    tf  - таймфрейм                ( 0 - текущий таймфрейм)                 |
//+----------------------------------------------------------------------------+
int GetTradeSignal(string sym="", int tf=0) {
  int bs=0;
  if (sym=="") sym=Symbol();

   double ma1=iMA(Symb_3,Tf,MAPeriod,0,MODE_EMA,PRICE_CLOSE,Shft_1);
   double ma2=iMA(Symb_3,Tf,MAPeriod,0,MODE_EMA,PRICE_CLOSE,Shft_1+1);
   double ma3=iMA(Symb_3,Tf,MAPeriod,0,MODE_EMA,PRICE_CLOSE,Shft_1+2);
   
   double ma_1=iMA(Symb_4,Tf_1,MAPeriod_1,0,MODE_EMA,PRICE_CLOSE,Shft_1);
   double ma_2=iMA(Symb_4,Tf_1,MAPeriod_1,0,MODE_EMA,PRICE_CLOSE,Shft_1+1);
   double ma_3=iMA(Symb_4,Tf_1,MAPeriod_1,0,MODE_EMA,PRICE_CLOSE,Shft_1+2);
   
   if((ma1<ma2 && ma1<ma3)&&(ma_1>ma_2 && ma_1>ma_3)) bs=1;//если индекс падает и кросс растет = покупаем "EURUSD"
   if((ma1<ma2 && ma1<ma3)&&(ma_1<ma_2 && ma_1<ma_3)) bs=2;//если индекс падает и кросс падает = покупаем "GBPUSD"
   
   if((ma1>ma2 && ma1>ma3)&&(ma_1>ma_2 && ma_1>ma_3)) bs=-2;//если индекс растет и кросс растет = продаем "GBPUSD"
   if((ma1>ma2 && ma1>ma3)&&(ma_1<ma_2 && ma_1<ma_3)) bs=-1;//если индекс растет и кросс падает = продаем "EURUSD"
   
   return(bs);
 }
//+------------------------------------------------------------------+


В идеале конечно бы хотелось в советнике ещё иметь функцию усреднения позиций.
Спасибо.
  • 0
  • Просмотров: 1605
  • 28 декабря 2021, 14:34
  • ssg
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
не берусь
avatar

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

  • 28 декабря 2021, 18:52
+
0
Наконец-то, ты наш, понял себе цену. Давно пора.
avatar

  13  axe44 Сообщений: 1149 - Алек

  • 28 декабря 2021, 20:21
+
0
???
avatar

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

  • 28 декабря 2021, 20:35
+
0
Для терминала, где все действия нужно в отдельную функцию возводить тут нахально и без денег «из мт4 мне надо в мт5». Спасибо, но не зачтётся. До-сви-дос.
avatar

  13  axe44 Сообщений: 1149 - Алек

  • 28 декабря 2021, 20:41
+
0
«Земляк, а ты чьих будешь?»
Я с вами на брудершавт не пил, и катран на заваленке не катал.
Ты себе потыкай куда ни будь сидя на очке.
avatar

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

  • 28 декабря 2021, 20:48
+
0
Может быть тогда немного измените советник отсюда:http://mql.opentraders.ru/29099.html
Изменения следующие
1.Ограничить число пар списком в настройках.
2.Открытие первой позиции по сигналу индикатора SuperTrend — индикатор для
MetaTrader 5 отсюда www.mql5.com/ru/code/22611
3.Закрытие позиций одного символа при достижении
input double рrofit = 50; // Профит в валюте для одного символа.
4.Закрытие всех позиций советника при достижении
input double Profit = 50; // Профит в валюте для всех символов
советника.
avatar

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

  • 28 декабря 2021, 20:42
+
0
сначала пишите что то простое, затем можно чуть доработать, а с все сразу не ко мне
avatar

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

  • 28 декабря 2021, 20:53
+
0
Андрей, ты вроде не брался за эту тему. Может кинем это дело? Тем более тут оскорбления пошли
avatar

  13  axe44 Сообщений: 1149 - Алек

  • 29 декабря 2021, 03:13
+
0
Хорошо.Давайте начнем с п.№1 -ограничения пар в советнике.
avatar

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

  • 28 декабря 2021, 21:43
+
0
по первоначальному тз сделал: www.opentraders.ru/downloads/3210/


avatar

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

  • 29 декабря 2021, 20:10
+
0
Андрей, большое спасибо.
Буду изучать.
avatar

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

  • 29 декабря 2021, 20:51
+
0
Андрей, еще большое спасибо. Усреднение попробую сам добавить.Ну не лежит у меня душа к пятерке.Наверное годы.А изучать наверное придется.
avatar

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

  • 29 декабря 2021, 21:04

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