Помогите пожалуйста!!!!.Советник в тестере работает нормально.Но при копировании его на другой лист при запуске выдает ошибку!!Order Send Error 130

 

Советник в тестере работает нормально.Но при полном!!! копировании его на другой чистый лист после компиляции(она проходит нормально) при запуске в тестере выдает ошибку!! Как такое может быть??



extern double SL=30; //Величина SL
extern double TP=50; //Величина ТР
extern double opt1=15;
extern double opt2=6;
extern double opt3=62;
extern double opt4=23;
extern double opt5=25;
//--------------------------------------------------------------------
//Глобальные переменные
bool sell=false; //флаг продажи
bool buy=false; //флаг покупки
bool vishe=false; //флаг нахождения стохастика выше конверта
bool nige=false; //флаг нахождения стохастика ниже конверта
datetime bar_time=0; //флаг нового бара
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//--------------------------------------------------------------------
//Определении нового бара
if (bar_time==iTime(0,0,0)) //сравнение вр.открытия текущего бара
return(0); //т.е если сформировался новый бар то продолжаем
bar_time=iTime(0,0,0);
//--------------------------------------------------------------------
//Переменные
double stoch,mov; //Значение
int total,pos,i;
string symb;

//-------------------------------------------------------------------

//-------------------------------------------------------------------
//Торговые критерии
for (i=1;i<opt3;i++)
{
mov+=iStochastic(NULL,0,opt1,opt2,3,MODE_SMA,0,MODE_MAIN,i);
}
mov/=(opt3-1);
stoch=iStochastic(NULL,0,opt1,opt2,3,MODE_SMA,0,MODE_MAIN,1);
//-----------------------------------------------------------------
if (((nige==true)||(vishe==true))==0)
{
if (stoch>(mov+opt5)) vishe=true;
if (stoch<(mov-opt4)) nige=true;
return;
}
if ((nige==true)||(vishe==true))
{
if (vishe==true)
if (stoch<(mov+opt5))
{
sell=true;
vishe=false;
nige=false;
}
else
return;

if (nige==true)
if (stoch>(mov-opt4))
{
buy=true;
vishe=false;
nige=false;
}
else
return;
}
//-------------------------------------------------------------------
//Блок анализа установленых ордеров
total=OrdersTotal(); //Количество всех ордеров
symb=Symbol();
color cvet;
double ord_lot,price;
for (pos=1;pos<=total;pos++) //Цикл перебора всех ордеров
if (OrderSelect(pos-1,SELECT_BY_POS,MODE_TRADES)==true) //Если ордер открытый или отложенный то продолжаем
{
if (OrderSymbol()!=symb) //Если наш фин.инструмент то продолжаем
continue;
if (OrderType()<2) //Если ордер рыночный,то закрываем
{
if (OrderType()==0)
{
price=Bid;
cvet=Red;
}
if (OrderType()==1)
{
price=Ask;
cvet=Green;
}
ord_lot=OrderLots();
OrderClose(OrderTicket(),ord_lot,price,5,cvet);
}
if (OrderType()>1) //Если ордер отложенный то удаляем его
OrderDelete(pos);
}
//--------------------------------------------------------------------
//Выставление рыночных ордеров
double min_lot=MarketInfo(Symbol(),MODE_MINLOT);
if (buy==true)
OrderSend(Symbol(),0,min_lot,Ask,5,Bid-SL*Point,Ask+TP*Point,"",0,0,Green);//
if (sell==true)
OrderSend(Symbol(),1,min_lot,Bid,5,Ask+SL*Point,Bid-TP*Point,"",0,0,Red);//
//--------------------------------------------------------------------
//Установление флагов в начальное положение
sell=false;
buy=false;
//--------------------------------------------------------------------
return(0);
}
//+-----------

 

Тут дело, наверно, не в другом компьютере. В пятницу тестил два советника. Помоему даже в субботу прогонял. Сегодня включаю, тоже 130 ошибка. Не понятно с чего вылезает. Может с обновлениями связано?

 
Rattnik >>:

Советник в тестере работает нормально.Но при полном!!! копировании его на другой чистый лист после компиляции(она проходит нормально) при запуске в тестере выдает ошибку!! Как такое может быть??


//-------------------------------------------------------------------------------------------------

// Alert: "Опера тупит :(( так приходиться млин."

//--------------------------------------------------------------------------------------------------

Хз, у нас таких кадров и талантов нет. Возможно не по тому инструменту гоните ...

130 ошибка в стопах, в поиске наберите 130 и пробегите по темам...

 

Подумайте куда бы бы присобачит в код, и как и зачем это обычно используется

MarkeInfo(Symbol(), MODE_STOPLEVEL)
Глядишь и забудите про такую ошибку.
 

Похоже я понял в чем дело. Это скорее всего связано либо с обновлениями. либо с историей. Но смысл в том, что в пятницу у меня на EUR/USD было четыре знака после запятой, теперь пять. Соотвественно, если в коде идет какой-нить расчет это нужно учитывать. Скорее всего это.

 

Короче размер пункта уменьшился.

extern double SL=30; //Величина SL
extern double TP=50; //Величина ТР

Надо заменить на

extern double SL=300; //Величина SL
extern double TP=500; //Величина ТР

и будет счастье. :)

 
double Tick = MarketInfo(Symbol(), MODE_TICKSIZE);

Не используйте в расчетах значение Point. Это неуниверсально. Используйте Tick - минимальное изменение цены за тик. И уже полученное при умножении значение сравнивайте со стоплевелом.

Причина обращения: