vypchela

 
Уровень 12

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


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

Рейтинг 2146



РЕКОМЕНДУЮ




Лучшее от vypchela



Советник по Фибоначчи Комментариев 8
2020-11-10 16:12:30Рейтинг 0

Советник для МТ5 Комментариев 17
2022-10-22 17:34:39Рейтинг 0

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

Андрей, пытался сделать мультивалютник как ты делал в заказе: zakaz.opentraders.ru/63287.html не получилось, в тестере показывает только одну пару и тестируется только при trade.PositionOpen, для OpenSell OpenBuy пишет ошибку "[Invalid request]", также не получается заставить работать один ордер раз в день и добавить любое условие для входа, можно для индикатора МА, добавить простой трал. Посмотри пожалуйста если будет время, за ранее спасибо.

//+------------------------------------------------------------------+
//|                                                    ZeroPoint.mq5 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.02"

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

//--- входные параметры эксперта
input int      TakeProfit = 500;       // Тейкпрофит
input int      StopLoss   = 500;       // Стоплосс
input int      Slip       = 50;        // Проскальзывание
input double   Lot        = 0.01;       // Количество лотов для торговли 
input long     Magic      = 123;       // Магик

input  string Symbols = "EURUSD,GBPUSD";

CTrade trade;                          // Используем торговый класс CTrade
long m=0;
string symbols[4];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Array();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
void Array()
  {
   symbols[0]=StringSubstr(Symbols,0,6);

   for(int i=0; i<4; i++)
     {
      symbols[i]=StringSubstr(Symbols,i*(6+1),6);
     }
  }
//+------------------------------------------------------------------+
//|              1 сделка в день                                     |
//+------------------------------------------------------------------+
bool DayDeal(string symb)
  {
   if(HistorySelect(0,TimeCurrent()))
     {
      if(PositionGetString(POSITION_SYMBOL)==symb)
        {
         datetime t=(datetime)HistoryDealGetInteger(HistoryDealGetTicket(HistoryDealsTotal()-1),DEAL_TIME);
         if(TimeCurrent()-t<24*3600)
           {
            return(false);
           }
        }
     }
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenBuy(string symb)
  {
// Лучшее предложение на покупку
   double Ask=SymbolInfoDouble(symb,SYMBOL_ASK);
// Лучшее предложение на продажу                           
   double Bid=SymbolInfoDouble(symb,SYMBOL_BID);
//--- готовим запрос 
   MqlTradeRequest request;
   request.action = TRADE_ACTION_DEAL;                                 // немедленное исполнение
   request.price = NormalizeDouble(Ask,_Digits);                       // последняя цена ask
   request.sl = NormalizeDouble(Ask - StopLoss*_Point,_Digits);        // Stop Loss
   request.tp = NormalizeDouble(Ask + TakeProfit*_Point,_Digits);      // Take Profit
   request.symbol= symb;                                               // символ
   request.volume = Lot;                                               // количество лотов для торговли
   request.magic = Magic;                                              // Magic Number
   request.type = ORDER_TYPE_BUY;                                      // ордер на покупку
   request.type_filling = ORDER_FILLING_FOK;                           // тип исполнения ордера - все или ничего
   request.deviation=Slip;                                             // проскальзывание от текущей цены
//--- отправим торговый приказ 
   MqlTradeResult result={0};
   if(OrderSend(request,result))
//--- выведем в лог ответ сервера   
   Print(__FUNCTION__,":",result.comment); 
   if(result.retcode==10016) Print(result.bid,result.ask,result.price);    
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenSell(string symb)
  {
// Лучшее предложение на покупку
   double Ask=SymbolInfoDouble(symb,SYMBOL_ASK);
// Лучшее предложение на продажу                           
   double Bid=SymbolInfoDouble(symb,SYMBOL_BID);
   
//--- готовим запрос 
   MqlTradeRequest request;
   request.action = TRADE_ACTION_DEAL;                                 // немедленное исполнение
   request.price = NormalizeDouble(Bid,_Digits);                       // последняя цена ask
   request.sl = NormalizeDouble(Bid + StopLoss*_Point,_Digits);        // Stop Loss
   request.tp = NormalizeDouble(Bid - TakeProfit*_Point,_Digits);      // Take Profit
   request.symbol= symb;                                               // символ
   request.volume = Lot;                                               // количество лотов для торговли
   request.magic = Magic;                                              // Magic Number
   request.type = ORDER_TYPE_SELL;                                     // ордер на продажу
   request.deviation=Slip;                                             // проскальзывание от текущей цены
//--- отправим торговый приказ 
   MqlTradeResult result={0};
   if(OrderSend(request,result))
//--- выведем в лог ответ сервера   
   Print(__FUNCTION__,":",result.comment); 
   if(result.retcode==10016) Print(result.bid,result.ask,result.price);
    {
 
    }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenPos(string symb)
  {
// Лучшее предложение на покупку
   double Ask=SymbolInfoDouble(symb,SYMBOL_ASK);
// Лучшее предложение на продажу                           
   double Bid=SymbolInfoDouble(symb,SYMBOL_BID);

//--- Стопы
   double stop=0,take=0;
//--- Buy
   if(PositionsTotal()<1 && DayDeal(symb))
     {
      //--- Вычисляем стопы
      if(StopLoss>0)   stop=Ask-StopLoss*_Point;
      if(TakeProfit>0) take=Ask+TakeProfit*_Point;
      //--- Открываем ордер на покупку
//      trade.PositionOpen(symb,ORDER_TYPE_BUY,Lot,NormalizeDouble(Ask,_Digits),NormalizeDouble(stop,_Digits),NormalizeDouble(take,_Digits));
      OpenBuy(symb);
     }
//--- Sell
   if(PositionsTotal()<1 && DayDeal(symb))
     {
      //--- Вычисляем стопы
      if(StopLoss>0)   stop=Bid+StopLoss*_Point;
      if(TakeProfit>0) take=Bid-TakeProfit*_Point;
      //--- Открываем ордер на продажу
//      trade.PositionOpen(symb,ORDER_TYPE_SELL,Lot,NormalizeDouble(Bid,_Digits),NormalizeDouble(stop,_Digits),NormalizeDouble(take,_Digits));
      OpenSell(symb);
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   for(int i=0; i<ArraySize(symbols); i++)
   {
   if(symbols[i]!="")
     {
     OpenPos(symbols[i]);
     }
    }


   Comment("\n Pos: ",PositionsTotal(),
           "\n Symb: ",PositionGetSymbol(0),
           "\n Magic: ",m);
  }

//+------------------------------------------------------------------+
  • 0
  • Просмотров: 1913
  • 5 декабря 2021, 12:50
  • vypchela
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
тз практически отсутствует. нет ни входов ни выходов ни скринов
avatar

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

  • 5 декабря 2021, 12:58
+
0
Советник для теста, можно сделать любое условие для входа, главное открытие ордера один раз в день и сделать мультивалютник как на заказе для МТ4 zakaz.opentraders.ru/63287.html
avatar

  12  vypchela Автор Сообщений: 112

  • 5 декабря 2021, 13:12
+
0
в болванке есть простые входы, 1 сделка в день, мультивалютность и закрытие по профиту: www.opentraders.ru/downloads/3194/

avatar

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

  • 5 декабря 2021, 14:50
+
0
Спасибо Андрей, а одной строкой можно сделать:
input string Symbols = «EURUSD,GBPUSD»;
а то не очень удобно, что при добавлении пары править код.
avatar

  12  vypchela Автор Сообщений: 112

  • 5 декабря 2021, 15:10
+
0
это более универсальный вариант. если делать одной строкой, можно в символ не попасть или в число символов и работать не будет
avatar

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

  • 5 декабря 2021, 15:12
+
0
А для МТ4 недавно делали, правда еще не тестил тоже такое может быть?
avatar

  12  vypchela Автор Сообщений: 112

  • 5 декабря 2021, 15:20
+
0
там тоже
avatar

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

  • 5 декабря 2021, 17:00
+
0
просмотрел штук 30 мультов на мкл, со строкой только один вариант наподобие моего.
avatar

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

  • 5 декабря 2021, 17:21
+
0
Хорошо, пусть будет так. Спасибо.
avatar

  12  vypchela Автор Сообщений: 112

  • 5 декабря 2021, 17:25

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