Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Привык пользоваться стандартной библиотекой? В MQL5 она тоже есть!
Kirill Andreev
659
Kirill Andreev 2016.10.03 23:06 

Ниже скину код

Не получается настроить чтоб работал как я хочу.

Должно быть примерно так:

if(rezult>InpPips)    //     означает что размер 1 тика стал больше чем нами заданное значение (например 5 пунктов)  и если это так то открывает 1 ордер селл и 1 ордер бай

но почему то он хочет так делать, а открывает сразу кучу ордеров.

P.S начинающий программист  )

Maxim Kuznetsov
8284
Maxim Kuznetsov 2016.10.03 23:27  

для MT5 - см. CopyTicks в документации

для 4-ки задача нетривиальна.

Kirill Andreev
659
Kirill Andreev 2016.10.04 05:20  
//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
// Переменные, изменяемые программно
int Corr;                    // Автоматический корректор котировок, 10 для 5-значных котировок и 1 для 4-значных
int TwoDigCorr;              // Корректор для работы с двухзначными котировками
bool New_Bar=false;          // Флаг образования нового бара
int Oppoz;                   // Флаг выставления противоположной отложки при СЛ
int TradeFlag;               // Флаг возможности открытия сделок
//--- input parameter
input double InpPips=20;
extern double Lot=0.01;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
 // Проверка необходимых для работы условий
  if (IsTradeAllowed())
   Alert("Работа советника  по символу ",Symbol()," начата.");
  else
  {
  Alert("Торговля советниками не разрешена! Советник не будет работать. Проверьте настройки Вашего терминала.");
  }
  // Проверка пользовательских объемов
    double Mlot=MarketInfo(Symbol(),MODE_MINLOT);
    if(Lot<Mlot)
     {
      Alert("Недопустимо маленькое значение объема сделок. Объем установлен на допустимый минимум!");
      Print("Недопустимо маленькое значение объема сделок. Объем установлен на допустимый минимум!");
      Lot=Mlot;
     }
  // Инициализация первичных данных
   if (Point==0.0001) Corr=1;
     else Corr=10;
     if(Digits==2) TwoDigCorr=10;
    else TwoDigCorr=1;
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   static double prev_price=0;
   double price=0;
//---
   MqlTick last_tick;
//--- 
   if(SymbolInfoTick(Symbol(),last_tick))
     {
      prev_price=last_tick.bid;

      double temp=prev_price-price;
      double rezult=temp*MathPow(10,Digits());
      prev_price=price;

      if(rezult>InpPips)
        {
         OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-100*Point,Bid+150*Point,0,444,5,clrBlue);// открываем бай
         OrderSend(Symbol(),OP_SELL,0.01,Bid,3,Ask+100*Point,Ask-150*Point,0,555,10,clrRed); // открываем селл
         
        }
        for (int i=1; i<=OrdersTotal(); i++)       //Цикл по всем ордерам,..
     {                                        //отражённым в терминале
      if(OrderSelect(i-1,SELECT_BY_POS)==true)//Если есть следующий
        {                                     
         OrderSelect(444,SELECT_BY_TICKET);
         OrderSelect(555,SELECT_BY_TICKET);
        
        }
     }                                        //Конец тела цикла
    
     }
    
   else Print("SymbolInfoTick() failed, error = ",GetLastError());
  }
  
  
Alexander Bereznyak
19934
Alexander Bereznyak 2016.10.04 09:17  

у вас нет контроля открытых ордеров, что это за конструкция 

OrderSelect(444,SELECT_BY_TICKET);
OrderSelect(555,SELECT_BY_TICKET);

 с чего вы решили, что ордера будут иметь эти тикеты, зачем внутри OrderSelect делать еще два выбора ордеров по не существующим тикетам

Maxim Kuznetsov
8284
Maxim Kuznetsov 2016.10.04 10:18  
Kirill Andreev:
Внимательно изучите структуру MqlTick - вам придётся её анализировать на тему пропуска тиков. Иначе выходит не размер а тыква :-)
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий