Учет ордеров - страница 2

 
Bogun_aleksandr:

Даже не так.))  Время открытия сделки 14:33. Цена в тот момент 1.13717. Цена открытия сделки - 1.13613. Фактическая цена в момент открытия сделки отличается от цены по которой открылась сделка на 100 пунктов. То есть сделка открылась сразу с убытком в 100 пунктов. Как это вообще возможно?

Что такого удивительного? Для тренировочного счета?? Ах, я еще и не такое видела. Покажите такие чудеса на реале. Зачем же такое выкладывать? Сразу можно определить вашу стратегию. Частая смена объемов, продажа на мелком развороте. Ах, Ах, как странно.
 
Я Вам всем могу дать совет. Используете или нет мне без разницы. Тренировочный счет очень важен для отработки стратегии. Превышение баланса? Реального? Это нужно в первые месяцы работы, для ознакомления. Удачи,
 

Вот код советника.  Там есть блок управления ордерами , но ограничение по общему количеству  ордеров. А нужно чтобы  ограничения были только в одну сторону; то есть не больше 1 ордера вверх и в тот же момент можно открыть ордер вниз , но тоже не больше 1.

//+------------------------------------------------------------------+
//|                                        MACD+OSma_pod_zigzag .mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
// Численные значения для М15
extern double StopLoss =2000; // SL для открываемого ордера
extern double TakeProfit =2000; // ТР для открываемого ордера

extern double Lots =0.1; // Жестко заданное колич. лотов
extern double Prots =0.07; // Процент свободных средств

extern double MA_Period_1      = 12;
extern double MA_Shift_1        = 6;
extern double MA_Period_2       = 12;
extern double MA_Shift_2        = 6;
extern double MA_Period_3       = 12;
extern double MA_Shift_3        = 6;

 extern int OsMA1_fast_period=10;
extern int OsMA1_slow_period=20;
extern int OsMA1_signal_period=14;

extern double Level1_c =0.0000001;
extern double Level1_p =-0.0000001;

   double MacdCurrent, MacdPrevious, SignalCurrent, SignalPrevious;

extern string Парaметры_1=" Envelopes1";
extern  int ma_period_1 = 21;
extern  int ma_method_1 = 0;
extern  int applied_price_1=0;
extern  double deviation_1=0.5;

extern string Парaметры_2=" Envelopes2";
extern  int ma_period_2 = 21;
extern  int ma_method_2 = 0;
extern  int applied_price_2=0;
extern  double deviation_2=0.5;

extern string Парaметры_3=" Envelopes3";
extern  int ma_period_3 = 21;
extern  int ma_method_3 = 0;
extern  int applied_price_3=0;
extern  double deviation_3=0.5;

extern string Парaметры_4=" Envelopes4";
extern  int ma_period_4 = 21;
extern  int ma_method_4 = 0;
extern  int applied_price_4=0;
extern  double deviation_4=0.5;

extern string Парaметры_5=" Envelopes5";
extern  int ma_period_5 = 21;
extern  int ma_method_5 = 0;
extern  int applied_price_5=0;
extern  double deviation_5=0.5;



extern string Парaмeтры=" MACD";
extern int fast=7;
extern int slow=36;
extern int signal=7;

 extern double Stochastic1_KPeriod=5;
extern double Stochastic1_DPeriod=3;
extern double Stochastic1_Slowing=3;
 extern double Stochastic2_KPeriod=5;
extern double Stochastic2_DPeriod=3;
extern double Stochastic2_Slowing=3;
extern double Stochastic3_KPeriod=5;
extern double Stochastic3_DPeriod=3;
extern double Stochastic3_Slowing=3;


extern double Stoch1.OverboughtLevel = 80.0;
extern double Stoch1.OversoldLevel = 20.0;
 
extern double Stoch2.OverboughtLevel = 80.0;
extern double Stoch2.OversoldLevel = 20.0;
 

extern double Stoch3.OverboughtLevel = 80.0;
extern double Stoch3.OversoldLevel = 20.0;


  extern string StartTime="06:00";
 extern string EndTime="06:00";
datetime TimeStart,TimeEnd;
string SMB;

extern double Stoch.OverboughtLevel = 80.0;
extern double Stoch.OversoldLevel = 20.0;

 extern bool Envelopes_Close_Signal = true;

bool Work=true; // Эксперт будет работать.
string Symb; // Название финанс. инструмента
//--------------------------------------------------------------- 2 --
int start()

{

int
Total, // Количество ордеров в окне
Tip=-1, // Тип выбран. ордера (B=0,S=1)
Ticket; // Номер ордера
double
MA_1_t,
MA_2_t,
MA_3_t,
ma_1_t,
ma_2_t,
ma_3_t,
ma_4_t,
ma_5_t,
M1_0,
 M1_1, // Значение MAIN на 0 и 1 барах
S1_0,
 S1_1, // Значение SIGNAL на 0 и 1барах
 M2_0,
 M2_1, // Значение MAIN на 0 и 1 барах
S2_0,
 S2_1,
 M3_0,
 M3_1, // Значение MAIN на 0 и 1 барах
S3_0,
 S3_1,
 OsMA1_t, // Значен. OsМА_1 текущее
Lot, // Колич. лотов в выбран.ордере
Lts, // Колич. лотов в открыв.ордере
Min_Lot, // Минимальное количество лотов
Step, // Шаг изменения размера лота
Free, // Текущие свободные средства
One_Lot, // Стоимость одного лота
Price, // Цена выбранного ордера
SL, // SL выбранного ордера
TP; // TP выбранного ордера
bool
Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false; // Критерий для открытия Sell
//--------------------------------------------------------------- 3 --
// Предварит.обработка
int
   
    TimeStart=StrToTime(StartTime);
    TimeEnd=StrToTime(EndTime);
    Comment(CurTime());
   
    if(CurTime()<TimeStart|| TimeCurrent()>TimeEnd){
        Work=false;
return; // Выход из start()
    }

//--------------------------------------------------------------- 4 --
// Учёт ордеров
Symb=Symbol(); // Название фин.инстр.
Total=0; // Количество ордеров
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
if (OrderSymbol()!=Symb)continue; // Не наш фин. инструм
if (OrderType()>1) // Попался отложенный
{
Alert("Обнаружен отложенный ордер. Эксперт не работает.");
return; // Выход из start()
}
Total++; // Счётчик рыночн. орд
if (Total>1) // Не более одного орд
{
Alert("Несколько рыночных ордеров. Эксперт не работает.");
return; // Выход из start()
}
Ticket=OrderTicket(); // Номер выбранн. орд.
Tip =OrderType(); // Тип выбранного орд.
Price =OrderOpenPrice(); // Цена выбранн. орд.
SL =OrderStopLoss(); // SL выбранного орд.
TP =OrderTakeProfit(); // TP выбранного орд.
Lot =OrderLots(); // Количество лотов
}
}
//--------------------------------------------------------------- 5 --
// Торговые критерии

// Обращение к функции техн.индикат.
MA_1_t=iMA(NULL,0,MA_Period_1,MA_Shift_1,MODE_SMA,PRICE_CLOSE,0);
  MA_2_t=iMA(NULL,0,MA_Period_2,MA_Shift_2,MODE_SMA,PRICE_CLOSE,0);
MA_3_t=iMA(NULL,0,MA_Period_3,MA_Shift_3,MODE_SMA,PRICE_CLOSE,0);

M1_0 = iStochastic(NULL,0,Stochastic1_KPeriod,Stochastic1_DPeriod,Stochastic1_Slowing,MODE_SMA,0,MODE_MAIN, 0);// 0 бар
M1_1 = iStochastic(NULL,0,Stochastic1_KPeriod,Stochastic1_DPeriod,Stochastic1_Slowing,MODE_SMA,0,MODE_MAIN, 1);// 1 бар
S1_0 = iStochastic(NULL,0,Stochastic1_KPeriod,Stochastic1_DPeriod,Stochastic1_Slowing,MODE_SMA,0,MODE_SIGNAL,0);// 0 бар
S1_1 = iStochastic(NULL,0,Stochastic1_KPeriod,Stochastic1_DPeriod,Stochastic1_Slowing,MODE_SMA,0,MODE_SIGNAL,1);// 1 бар

M2_0 = iStochastic(NULL,0,Stochastic2_KPeriod,Stochastic2_DPeriod,Stochastic2_Slowing,MODE_SMA,0,MODE_MAIN, 0);// 0 бар
M2_1 = iStochastic(NULL,0,Stochastic2_KPeriod,Stochastic2_DPeriod,Stochastic2_Slowing,MODE_SMA,0,MODE_MAIN, 1);// 1 бар
S2_0 = iStochastic(NULL,0,Stochastic2_KPeriod,Stochastic2_DPeriod,Stochastic2_Slowing,MODE_SMA,0,MODE_SIGNAL,0);// 0 бар
S2_1 = iStochastic(NULL,0,Stochastic2_KPeriod,Stochastic2_DPeriod,Stochastic2_Slowing,MODE_SMA,0,MODE_SIGNAL,1);// 1 бар

M3_0 = iStochastic(NULL,0,Stochastic3_KPeriod,Stochastic3_DPeriod,Stochastic3_Slowing,MODE_SMA,0,MODE_MAIN, 0);// 0 бар
M3_1 = iStochastic(NULL,0,Stochastic3_KPeriod,Stochastic3_DPeriod,Stochastic3_Slowing,MODE_SMA,0,MODE_MAIN, 1);// 1 бар
S3_0 = iStochastic(NULL,0,Stochastic3_KPeriod,Stochastic3_DPeriod,Stochastic3_Slowing,MODE_SMA,0,MODE_SIGNAL,0);// 0 бар
S3_1 = iStochastic(NULL,0,Stochastic3_KPeriod,Stochastic3_DPeriod,Stochastic3_Slowing,MODE_SMA,0,MODE_SIGNAL,1);// 1 бар


double Level1=iOsMA(NULL,0,OsMA1_fast_period,OsMA1_slow_period,OsMA1_signal_period,PRICE_CLOSE,0);

MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
   MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
   SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);

 double Envelopes_UPPER_1 = iEnvelopes(NULL,0,ma_period_1,ma_method_1,0,applied_price_1,deviation_1,MODE_UPPER,0);
  double Envelopes_LOWER_1 = iEnvelopes(NULL,0,ma_period_1,ma_method_1,0,applied_price_1,deviation_1,MODE_LOWER,0);
  double Envelopes_UPPER_2 = iEnvelopes(NULL,0,ma_period_2,ma_method_2,0,applied_price_2,deviation_2,MODE_UPPER,0);
  double Envelopes_LOWER_2 = iEnvelopes(NULL,0,ma_period_2,ma_method_2,0,applied_price_2,deviation_2,MODE_LOWER,0);
  double Envelopes_UPPER_3 = iEnvelopes(NULL,0,ma_period_3,ma_method_3,0,applied_price_3,deviation_3,MODE_UPPER,0);
  double Envelopes_LOWER_3 = iEnvelopes(NULL,0,ma_period_3,ma_method_3,0,applied_price_3,deviation_3,MODE_LOWER,0);
  double Envelopes_UPPER_4 = iEnvelopes(NULL,0,ma_period_4,ma_method_4,0,applied_price_4,deviation_4,MODE_UPPER,0);
  double Envelopes_LOWER_4 = iEnvelopes(NULL,0,ma_period_4,ma_method_4,0,applied_price_4,deviation_4,MODE_LOWER,0);
  double Envelopes_UPPER_5 = iEnvelopes(NULL,0,ma_period_5,ma_method_5,0,applied_price_5,deviation_5,MODE_UPPER,0);
  double Envelopes_LOWER_5 = iEnvelopes(NULL,0,ma_period_5,ma_method_5,0,applied_price_5,deviation_5,MODE_LOWER,0);
 

//----------------Блок на Покупку

if ( MacdCurrent>0.0001 && MacdCurrent>MacdPrevious&&  MA_1_t > MA_2_t&& MA_1_t>= Envelopes_UPPER_1&&MA_1_t<= Envelopes_UPPER_2&&Level1>=Level1_c &&M1_0 < Stoch1.OverboughtLevel&&M2_0 < Stoch1.OverboughtLevel&&M3_0 < Stoch1.OverboughtLevel) // Если разница между текущим Level и Level_c
{
Opn_B=true; // Критерий откр. Buy

}

if ( MacdCurrent>0.0001 && MacdCurrent> MacdPrevious&&  MA_1_t > MA_2_t&& MA_1_t>= Envelopes_UPPER_3&&MA_1_t<= Envelopes_UPPER_4 &&Level1>=Level1_c &&M1_0 < Stoch1.OverboughtLevel&&M2_0 < Stoch1.OverboughtLevel&&M3_0 < Stoch1.OverboughtLevel) // Если разница между текущим Level и Level_c
{
Opn_B=true; // Критерий откр. Buy

}

//---Второя часть бока на покупку

if ( MacdCurrent>0.0001 &&  MA_1_t > MA_2_t&& MA_1_t>= Envelopes_UPPER_1&&MA_1_t<= Envelopes_UPPER_2&&Level1>=Level1_c &&M1_0 < Stoch1.OverboughtLevel&&M2_0 < Stoch1.OverboughtLevel&&M3_0 < Stoch1.OverboughtLevel) // Если разница между текущим Level и Level_c
{
Opn_B=true; // Критерий откр. Buy

}

if ( MacdCurrent>0.0001 &&  MA_1_t > MA_2_t&& MA_1_t>= Envelopes_UPPER_3&&MA_1_t<= Envelopes_UPPER_4 &&Level1>=Level1_c &&M1_0 < Stoch1.OverboughtLevel&&M2_0 < Stoch1.OverboughtLevel&&M3_0 < Stoch1.OverboughtLevel) // Если разница между текущим Level и Level_c
{
Opn_B=true; // Критерий откр. Buy

}


//----------------Блок на Продажу

if( MacdCurrent<-0.0001 && MacdCurrent<MacdPrevious&&  MA_1_t < MA_2_t && MA_1_t <= Envelopes_LOWER_1 &&MA_1_t >= Envelopes_LOWER_2 &&  Level1<=Level1_p&&M1_0 > Stoch1.OversoldLevel&& M2_0 > Stoch1.OversoldLevel&&M3_0 > Stoch1.OversoldLevel    )// Если разница между текущим Level и Level_p
{
Opn_S=true; // Критерий откр. Sell

}


if( MacdCurrent<-0.0001 && MacdCurrent< MacdPrevious&&  MA_1_t < MA_2_t && MA_1_t <= Envelopes_LOWER_3 &&MA_1_t >= Envelopes_LOWER_4 &&  Level1<=Level1_p&&M1_0 > Stoch1.OversoldLevel&& M2_0 > Stoch1.OversoldLevel&&M3_0 > Stoch1.OversoldLevel    )// Если разница между текущим Level и Level_p
{
Opn_S=true; // Критерий откр. Sell

}

//----Вторая часть блока на Продажу

if( MacdCurrent<-0.0001 &&  MA_1_t < MA_2_t && MA_1_t <= Envelopes_LOWER_1 &&MA_1_t >= Envelopes_LOWER_2 &&MA_3_t >= Envelopes_LOWER_2&&  Level1<=Level1_p&&M1_0 > Stoch1.OversoldLevel&& M2_0 > Stoch1.OversoldLevel&&M3_0 > Stoch1.OversoldLevel    )// Если разница между текущим Level и Level_p
{
Opn_S=true; // Критерий откр. Sell

}


if( MacdCurrent<-0.0001 &&  MA_1_t < MA_2_t && MA_1_t <= Envelopes_LOWER_3 &&MA_1_t >= Envelopes_LOWER_4 &&MA_3_t >= Envelopes_LOWER_2&&  Level1<=Level1_p&&M1_0 > Stoch1.OversoldLevel&& M2_0 > Stoch1.OversoldLevel&&M3_0 > Stoch1.OversoldLevel    )// Если разница между текущим Level и Level_p
{
Opn_S=true; // Критерий откр. Sell

}






//------------------Блок на Закрытие ордера--------------



   {
   if(OrderOpenTime() < Time[5]&&MA_1_t < MA_2_t)
        
      Cls_B=true; // Критерий закр. Sell
     
  if(OrderOpenTime() < Time[5]&&   MA_1_t<= Envelopes_UPPER_5)
        
      Cls_B=true; // Критерий закр. Sell   
     
      if(OrderOpenTime() < Time[5]&&MA_1_t > MA_2_t )
         Cls_S=true; // Критерий закр. Sell
        
         if(OrderOpenTime() < Time[5]&& MA_1_t >=Envelopes_LOWER_5  )
         Cls_S=true; // Критерий закр. Sell
   }


//--------------------------------------------------------------- 6 --
// Закрытие ордеров
while(true) // Цикл закрытия орд.
{
if (Tip==0 && Cls_B==true) // Открыт ордер Buy..
{ //и есть критерий закр
Alert("Попытка закрыть Buy ",Ticket,". Ожидание ответа..");
RefreshRates(); // Обновление данных
Ans=OrderClose(Ticket,Lot,Bid,2); // Закрытие Buy
if (Ans==true) // Получилось :)
{
Alert ("Закрыт ордер Buy ",Ticket);
break; // Выход из цикла закр
}
if (Fun_Error(GetLastError())==1) // Обработка ошибок
continue; // Повторная попытка
return; // Выход из start()
}
if (Tip==1 && Cls_S==true) // Открыт ордер Sell..
{ // и есть критерий закр
Alert("Попытка закрыть Sell ",Ticket,". Ожидание ответа..");
RefreshRates(); // Обновление данных
Ans=OrderClose(Ticket,Lot,Ask,2); // Закрытие Sell
if (Ans==true) // Получилось :)
{
Alert ("Закрыт ордер Sell ",Ticket);
break; // Выход из цикла закр
}
if (Fun_Error(GetLastError())==1) // Обработка ошибок
continue; // Повторная попытка
return; // Выход из start()
}
break; // Выход из while
}
//--------------------------------------------------------------- 7 --
// Стоимость ордеров
RefreshRates(); // Обновление данных
Min_Lot=MarketInfo(Symb,MODE_MINLOT); // Миним. колич. лотов
Free =AccountFreeMargin(); // Свободн средства
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Стоимость 1 лота
Step =MarketInfo(Symb,MODE_LOTSTEP); // Шаг изменен размера
if (Lots > 0) // Если заданы лоты,то
Lts =Lots; // с ними и работаем

else // % свободных средств
Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Для открытия
if(Lts < Min_Lot) Lts=Min_Lot; // Не меньше минимальн
if (Lts*One_Lot > Free) // Лот дороже свободн.
{
Alert(" Не хватает денег на ", Lts," лотов");
return; // Выход из start()
}
//--------------------------------------------------------------- 8 --
// Открытие ордеров
while(true) // Цикл закрытия орд.
{
if (Total==0 && Opn_B==true) // Открытых орд. нет +
{ // критерий откр. Buy
RefreshRates(); // Обновление данных
SL=Bid - New_Stop(StopLoss)*Point; // Вычисление SL откр.
TP=Bid + New_Stop(TakeProfit)*Point; // Вычисление TP откр.
Alert("Попытка открыть Buy. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//Открытие Buy
if (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Buy ",Ticket);
return; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибок
continue; // Повторная попытка
return; // Выход из start()
}
if (Total==0 && Opn_S==true) // Открытых орд. нет +
{ // критерий откр. Sell
RefreshRates(); // Обновление данных
SL=Ask + New_Stop(StopLoss)*Point; // Вычисление SL откр.
TP=Ask - New_Stop(TakeProfit)*Point; // Вычисление TP откр.
Alert("Попытка открыть Sell. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);//Открытие Sel
if (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Sell ",Ticket);
return; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибок
continue; // Повторная попытка
return; // Выход из start()
}
break; // Выход из while

}
//--------------------------------------------------------------- 9 --
return; // Выход из start()
}
//-------------------------------------------------------------- 10 --
int Fun_Error(int Error) // Ф-ия обработ ошибок
{
switch(Error)
{ // Преодолимые ошибки
case 4: Alert("Торговый сервер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решение
return(1); // Выход из функции
case 135:Alert("Цена изменилась. Пробуем ещё раз..");
RefreshRates(); // Обновим данные
return(1); // Выход из функции
case 136:Alert("Нет цен. Ждём новый тик..");
while(RefreshRates()==false) // До нового тика
Sleep(1); // Задержка в цикле
return(1); // Выход из функции
case 137:Alert("Брокер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решение
return(1); // Выход из функции
case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
Sleep(500); // Простое решение
return(1); // Выход из функции
// Критические ошибки
case 2: Alert("Общая ошибка.");
return(0); // Выход из функции
case 5: Alert("Старая версия терминала.");
Work=false; // Больше не работать
return(0); // Выход из функции
case 64: Alert("Счет заблокирован.");
Work=false; // Больше не работать
return(0); // Выход из функции
case 133:Alert("Торговля запрещена.");
return(0); // Выход из функции
case 134:Alert("Недостаточно денег для совершения операции.");
return(0); // Выход из функции
default: Alert("Возникла ошибка ",Error); // Другие варианты
return(0); // Выход из функции
}
}
//-------------------------------------------------------------- 11 --
int New_Stop(int Parametr) // Проверка стоп-прик.
{
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Миним. дистанция

if (Parametr < Min_Dist) // Если меньше допуст.
{
Parametr=Min_Dist; // Установим допуст.
Alert("Увеличена дистанция стоп-приказа.");
}
return(Parametr); // Возврат значения
}




MetaQuotes Software Corp.
MetaQuotes Software Corp.
  • www.metaquotes.net
Millions of traders and hundreds of brokers cannot be wrong — they have chosen MetaTrader 5 for trading Forex and financial markets! Learn more
 
Vitaliy Gavriluk:

Вот код советника.

Интересно, кто этот бред писал??

 

Мне неинтересно, но я на продажу не пишу.  

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

 

Этот бред писал я. Это советник работает по своим условиям мне его нужно немножко модифицировать.  А тех кто не разбирается и любит просто комментировать на тему Бреда прошу мне больше не писать. Пользуйтесь сами своими одноразовыми  советниками на две строчки , которые только и могут что  сливать счётa.

 
Vitaliy Gavriluk:

Этот бред писал я. Это советник работает по своим условиям мне его нужно немножко модифицировать.  А тех кто не разбирается и любит просто комментировать на тему Бреда прошу мне больше не писать. Пользуйтесь сами своими одноразовыми  советниками на две строчки , которые только и могут что  сливать счётa.

Что за обиды ? Написано то всё криво и где-то бестолково.
Привёл код в порядок и исправил суть вопроса: разрешено 1 бай в рынке и 1 селл в рынке
В получение сигнала от индикаторов не вникал, тут уж сам))

Файлы:
GoodVersion.mq4  49 kb
 
FXwin:

Что за обиды ? Написано то всё криво и где-то бестолково.
Привёл код в порядок и исправил суть вопроса: разрешено 1 бай в рынке и 1 селл в рынке
В получение сигнала от индикаторов не вникал, тут уж сам))

Ах, Я такая пьяная, как турецкая сабля. Не предполагала, что кто то поможет пользователю с кодами. Двинемся дальше открытия двух позиций?
 
На меня не смотрите, Я забанюсь в любую секунду. Ах, Я такая пьяная, как турецкая сабля.
 
FXwin:

Что за обиды ? Написано то всё криво и где-то бестолково.
Привёл код в порядок и исправил суть вопроса: разрешено 1 бай в рынке и 1 селл в рынке
В получение сигнала от индикаторов не вникал, тут уж сам))

//| Номер бара открытия | int BarOp(int type=-1){ datetime t=0; for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderType()<2 && OrderSymbol()==Symb && OrderMagicNumber()==Magic) { if((OrderType()==type || (OrderType()<2 && type==-1)) && t<OrderOpenTime()) t=OrderOpenTime();}return(iBarShift(Symbol(),0,t,true));} По мимо всего прочего? Привязка к номеру бара. Очень сомнительна. Ах, как старнно. Ах, Я такая пьяная, как турецкая сабля.