Не могу найти ошибку в коде. Помогите, плиз!

 
Идея простая - беру два RSI. Быстрый и медленный. Как-только быстрый зашел в погран зону, ждем когда быстрый вернется к уровню 50 и тогда входит в направлении тренда с небольшими целями.

Эксперт дает ошибку 130

#define MAGICMA 20050610

extern double Lots = 0.1;
extern double RSIslowperiod = 5;
extern double RSIfastperiod = 13;
extern double RSIuplevel = 76;
extern double RSIdownlevel = 24;
extern double middlebuy = 50;
extern double middlesell = 50;
extern double stoploss = 50;
extern double takeprofit=50;

//+------------------------------------------------------------------------------+
//| Все переменные обозначены выше. Есть ли поза? Если нет, то функция покажет 0 |
//| Если да, то 1 или -1. |
//+-------------------------------------------------------------------------------+


int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>0) return(buys);
else return(-sells);
}


//+------------------------------------------------------------------+
//| Проверка для открытия позиции с первым тиком нового бара. |
//+------------------------------------------------------------------+
void CheckForOpen()
{
double rsi_fast, rsi_fast1;
double rsi_slow, rsi_slow1;
int triggerbuy, triggersell;
int ticket;

//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get RSI slow and fast
rsi_slow=iRSI(NULL,0,RSIslowperiod,1,0); // rsi slow
rsi_fast=iRSI(NULL,0,RSIfastperiod,1,0);// rsi fast
rsi_slow1=iRSI(NULL,0,RSIslowperiod,1,1); // rsi slow на бар назад
rsi_fast1=iRSI(NULL,0,RSIfastperiod,1,1);// rsi fast на бар назад

// triggerbuy. RSI медленный пересек верхнюю границу, ждем когда быстрый вернется к 50 и покупаем

if (OrdersTotal()==0) triggerbuy=0;
if (rsi_slow1<RSIuplevel && rsi_slow>=RSIuplevel && triggerbuy==0) triggerbuy=1;
if (rsi_fast1>middlebuy && rsi_fast<=middlebuy) triggerbuy++;

// triggersell RSI медленный пересек нижнюю границу, ждем когда быстрый вернется к 50 и продаем

if (OrdersTotal()==0) triggersell=0;
if (rsi_slow1>RSIdownlevel && rsi_slow>=RSIdownlevel && triggersell==0) triggersell++;
if (rsi_fast1<middlesell && rsi_fast>=middlesell) triggersell++;


//---- Условие покупки
if(triggerbuy==2)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid+stoploss*Point, Bid+takeprofit*Point, "buy",MAGICMA,0,Red);
triggerbuy=0;
}
//---- Условие покупки
if(triggersell==2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+stoploss*Point, Ask+takeprofit*Point, "sell",MAGICMA,0,Blue);
triggersell=0;
}
//----
}


void start()
{
//---- check for history and trading
if(Bars<25 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();

int err;
{
err=GetLastError();
Print(err);
return(0);
}


//----
}
//+------------------------------------------------------------------+
 
Kogelet:

Идея простая - беру два RSI. Быстрый и медленный. Как-только быстрый зашел в погран зону, ждем когда быстрый вернется к уровню 50 и тогда входит в направлении тренда с небольшими целями.

Эксперт дает ошибку 130

#define MAGICMA 20050610

extern double Lots = 0.1;
extern double RSIslowperiod = 5;
extern double RSIfastperiod = 13;
extern double RSIuplevel = 76;
extern double RSIdownlevel = 24;
extern double middlebuy = 50;
extern double middlesell = 50;
extern double stoploss = 50;
extern double takeprofit=50;

//+------------------------------------------------------------------------------+
//| Все переменные обозначены выше. Есть ли поза? Если нет, то функция покажет 0 |
//| Если да, то 1 или -1. |
//+-------------------------------------------------------------------------------+


int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>0) return(buys);
else return(-sells);
}


//+------------------------------------------------------------------+
//| Проверка для открытия позиции с первым тиком нового бара. |
//+------------------------------------------------------------------+
void CheckForOpen()
{
double rsi_fast, rsi_fast1;
double rsi_slow, rsi_slow1;
int triggerbuy, triggersell;
int ticket;

//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get RSI slow and fast
rsi_slow=iRSI(NULL,0,RSIslowperiod,1,0); // rsi slow
rsi_fast=iRSI(NULL,0,RSIfastperiod,1,0);// rsi fast
rsi_slow1=iRSI(NULL,0,RSIslowperiod,1,1); // rsi slow на бар назад
rsi_fast1=iRSI(NULL,0,RSIfastperiod,1,1);// rsi fast на бар назад

// triggerbuy. RSI медленный пересек верхнюю границу, ждем когда быстрый вернется к 50 и покупаем

if (OrdersTotal()==0) triggerbuy=0;
if (rsi_slow1<RSIuplevel && rsi_slow>=RSIuplevel && triggerbuy==0) triggerbuy=1;
if (rsi_fast1>middlebuy && rsi_fast<=middlebuy) triggerbuy++;

// triggersell RSI медленный пересек нижнюю границу, ждем когда быстрый вернется к 50 и продаем

if (OrdersTotal()==0) triggersell=0;
if (rsi_slow1>RSIdownlevel && rsi_slow>=RSIdownlevel && triggersell==0) triggersell++;
if (rsi_fast1<middlesell && rsi_fast>=middlesell) triggersell++;


//---- Условие покупки
if(triggerbuy==2)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid+stoploss*Point, Bid+takeprofit*Point, "buy",MAGICMA,0,Red);
triggerbuy=0;
}
//---- Условие покупки
if(triggersell==2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+stoploss*Point, Ask+takeprofit*Point, "sell",MAGICMA,0,Blue);
triggersell=0;
}
//----
}


void start()
{
//---- check for history and trading
if(Bars<25 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();

int err;
{
err=GetLastError();
Print(err);
return(0);
}


//----
}
//+------------------------------------------------------------------+


Смотри stoploss и takeprofit в OrderSend. И один, и второй по одну сторону от цены открытия.
Причина обращения: