проблема в том, что советник открывает ордера на каждом тике, а мне нужно только когда соответсвует условиям в программе
как можно решить эту проблему?
//+------------------------------------------------------------------+
//| 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,0,clrBlue);// открываем бай
OrderSend(Symbol(),OP_SELL,0.01,Bid,3,Ask+100*Point,Ask-150*Point,0,444,0,clrRed); // открываем селл
}
for (int i=1; i<=OrdersTotal(); i++) //Цикл по всем ордерам,..
{ //отражённым в терминале
if(OrderSelect(i-1,SELECT_BY_POS)==true)//Если есть следующий
{
OrderSelect(444,SELECT_BY_TICKET);
OrderSelect(444,SELECT_BY_TICKET);
}
} //Конец тела цикла
}
else Print("SymbolInfoTick() failed, error = ",GetLastError());
}