Советник не открывает ордера

 

Здравствуйте!

Пытаюсь написать советника, код прилагается:

//------Объявление переменных-----------------------------------------
extern int bb_period=20; //Период индикатора ББ
extern int bb_shift=1; //Сдвиг голубого индикатора, белого расчитывается автоматически
extern int Magic=55555; //Магик ордера
extern double Min_Lot_opn=0.1; //Значение минимального лота открытия
extern bool MM=false; //Использовать фиксированный лот или динамический
extern double Proc=10; //Процент для рассчета ордера открытия
//--------------------------------------------------------------------
int bb_shift_white; //Сдвиг белого индикатора, зависит от голубого
bool New_Bar=false; //Флаг нового бара
double Lot_opn; //Значение лота открытия
double TP_White; //Тейк для открытых по белой линии
double TP_Blue_Buy; //Тейк для BUY(открытие по голубой линии)
double TP_Blue_Sell; //Тейк для SELL(открытие по голубой линии)
double SL_Blue; //Стоп для BUY
double SL_S; //Стоп для SELL
//int Tic_1,Tic_2,Tic_3,Tic_4;
//--------------------------------------------------------------------

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//-----------------Определяем лот открытия ордеров--------------------
double Money=AccountFreeMargin();
double Step=MarketInfo(Symbol(),MODE_LOTSTEP); //Шаг изменен лотов
if(MM==true)
{
Lot_opn=MathFloor(Money*Proc/100)*Step; // Расчет лота открытия
if(Lot_opn<Min_Lot_opn)
Lot_opn =Min_Lot_opn;
}
if(MM==false)
Lot_opn =Min_Lot_opn;

//-----------------Получаем данные с индикаторов----------------------
bb_shift_white=bb_shift+1;
double bb_white_line_up_0=iBands(NULL,0,bb_period,bb_shift_white,0,PRICE_CLOSE,MODE_UPPER,0);
double bb_white_line_down_0=iBands(NULL,0,bb_period,bb_shift_white,0,PRICE_CLOSE,MODE_LOWER,0);
double bb_blue_line_up_0=iBands(NULL,0,bb_period,bb_shift,0,PRICE_CLOSE,MODE_UPPER,0);
double bb_blue_line_down_0=iBands(NULL,0,bb_period,bb_shift,0,PRICE_CLOSE,MODE_LOWER,0);
double bb_line_centre_0=iMA(NULL,0,bb_period,0,MODE_SMA,PRICE_CLOSE,0);
double bb_white_line_up_1=iBands(NULL,0,bb_period,bb_shift_white,0,PRICE_CLOSE,MODE_UPPER,1);
double bb_white_line_down_1=iBands(NULL,0,bb_period,bb_shift_white,0,PRICE_CLOSE,MODE_LOWER,1);
double bb_blue_line_up_1=iBands(NULL,0,bb_period,bb_shift,0,PRICE_CLOSE,MODE_UPPER,1);
double bb_blue_line_down_1=iBands(NULL,0,bb_period,bb_shift,0,PRICE_CLOSE,MODE_LOWER,1);
double bb_line_centre_1=iMA(NULL,0,bb_period,0,MODE_SMA,PRICE_CLOSE,1);

//-------------Определяем критерии открытия позиций--------------------
TP_White=bb_line_centre_0;
TP_Blue_Buy=bb_white_line_up_0;
TP_Blue_Sell=bb_white_line_down_0;
SL_Blue=bb_line_centre_0;

Fun_New_Bar(); //Обращение к ф-ии
if (New_Bar==true&&OrdersTotal()<=0)
{

if(High[1]>bb_white_line_up_1&&Close[1]<bb_white_line_up_1)
{
OrderSend(Symbol(),OP_SELL,Lot_opn,Bid,3,0,TP_White,NULL,Magic,Red);
}
if(Low[1]<bb_white_line_down_1&&Close[1]>bb_white_line_down_1)
{
OrderSend(Symbol(),OP_BUY,Lot_opn,Ask,3,0,TP_White,NULL,Magic,Blue);
}
if(High[1]<bb_white_line_up_1&&Close[1]>bb_blue_line_up_1&&Ask<bb_white_line_up_0)
{
OrderSend(Symbol(),OP_BUY,Lot_opn,Ask,3,SL_Blue,TP_Blue_Buy,NULL,Magic,Blue);
}
if(Low[1]>bb_white_line_down_1&&Close[1]<bb_blue_line_up_1&&Bid>bb_white_line_down_0)
{
OrderSend(Symbol(),OP_SELL,Lot_opn,Bid,3,SL_Blue,TP_Blue_Sell,NULL,Magic,Red);
}

}
return(0);
}
//--------------Функция определения нового бара-----------------------
void Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
}
}
//--------------------------------------------------------------------

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

Что тут не так?

 
Мой советник на данный момент тоже не открывает ордера (в тестере). Что я буду делать: буду принтовать исполнение условий и искать причину.
 
Добрый день(наверно). Не стал просматривать код вопрос показался очень знакомый. Была такая ситуация у одного дилера советник открывает ордера у другого нет и как у Вас ни каких ошибок или еще чего... причина оказалась простая - один дилер разрешает ставить ордер со стопами, другой нет. То-есть надо сначала установить ордер с нулевыми стопами и следующим тиком модифицировать то-есть прикрутить к этому ордеру стопы. Проверь у другого дилера как работает этот советник. . . . (если в этом причина) Александр.
 

TarasBY:
Мой советник на данный момент тоже не открывает ордера (в тестере). Что я буду делать: буду принтовать исполнение условий и искать причину.

Здравствуйте!

У меня в тесте как раз открывает. Ставлю на демо - тишина.

Пробовал выводить в логи, но там вообще тишина. А вот в тестере, в логи выводил номер тикета открытого ордера. Так он пишет Тикет1, а не реальный номер тикета ордера.


 

expertboss:
Добрый день(наверно). Не стал просматривать код вопрос показался очень знакомый. Была такая ситуация у одного дилера советник открывает ордера у другого нет и как у Вас ни каких ошибок или еще чего... причина оказалась простая - один дилер разрешает ставить ордер со стопами, другой нет. То-есть надо сначала установить ордер с нулевыми стопами и следующим тиком модифицировать то-есть прикрутить к этому ордеру стопы. Проверь у другого дилера как работает этот советник. . . . (если в этом причина) Александр.

Здравствуйте, Александр!

Боюсь, что нет, т.к. у этого же брокера работает и другой советник(писал сам), который выставляет ордера сразу со стопами. Заметил эту ошибку как раз тогда, когда выставлял ордера без стопов, чтоб потом автоматом закрывать при подходящих условиях. Тогда-то и начал выдавать ошибку в тестере, что ордер не может быть закрыт, т.к. передается неверное значение тикета. Когда попробовал вывести значение тикета в комментарии при установке ордеров, он мне начал выводить 1, 2, 3 и т.д. по порядку номера, а не реальные номера тикетов.

 
Прогнал в тестере итог -
131 Неправильный объем, ошибка в грануляции объема.

на демо работает открыл ордер, потом в обратку . . . .

 
expertboss:
Прогнал в тестере итог -
131 Неправильный объем, ошибка в грануляции объема.

на демо работает открыл ордер, потом в обратку . . . .

Есть такое понятие "нормализация лота". Не у всех ДЦ минимальный лот = 0.01. И когда советник вычисляет динамический лот (если его не нормализовать), "вылазит" эта ошибка.
 
TarasBY:
Есть такое понятие "нормализация лота". Не у всех ДЦ минимальный лот = 0.01. И когда советник вычисляет динамический лот (если его не нормализовать), "вылазит" эта ошибка.
Это понятно, дадим этот ответ задавшему вопрос. Но (я писал), что этот же советник (выше) открывает ордера на демо счете, только в тестере пишет эту ошибку. Александр.
 
expertboss:
Это понятно, дадим этот ответ задавшему вопрос. Но (я писал), что этот же советник (выше) открывает ордера на демо счете, только в тестере пишет эту ошибку. Александр.

В демо и на реале условия могут отличаться. И размер лота, и шаг
 
expertboss:
Прогнал в тестере итог -
131 Неправильный объем, ошибка в грануляции объема.

на демо работает открыл ордер, потом в обратку . . . .


Странно, я проверял на Альпари(5 знаков, мин. лот 0.01) и на FxPro(5 знаков, мин.лот 0,1). Именно по объему лота не выдавало ошибок.

Можете выложить файл .mq4, который Вы прогоняли у себя?

Уточните, пожалуйста, у какого брокера проверяли?

 
cherep:


Странно, я проверял на Альпари(5 знаков, мин. лот 0.01) и на FxPro(5 знаков, мин.лот 0,1). Именно по объему лота не выдавало ошибок.

Можете выложить файл .mq4, который Вы прогоняли у себя?

Уточните, пожалуйста, у какого брокера проверяли?

Извените виноват ошибка была у меня. Александр.
Причина обращения: