Проблема!Не работает закрытие

 

Не закрываются ордера. В чем ошибка?

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
extern int FastMacd = 12;
extern int SlowMacd = 26;
extern int RSIperiod = 12;
extern int RSIlow = 40;
extern int RSIhigh = 60;
extern double Lots = 0.3;
extern double Maclevel = 0.00061;
extern double SL = 700;
//--------------------------------------------------------------------------------------------
int
ret,
zak,
total;
//--------------------------------------------------------------------------------------------
double
New_Bar,
Time_0,
macd,
macd_1,
signal,
signal_1,
RSI,
RSI_1;
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int init()
{
//============================================================================================
SL = SL*Point; // СтопЛосс в пунктах
return;
//============================================================================================
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int start()
{
//============================================================================================
total=OrdersTotal();
if (total==2) return;
//--------------------------------------------------------------------------------------------
macd=iMACD(NULL,0,FastMacd,SlowMacd,9,PRICE_CLOSE,MODE_MAIN,1);
macd_1=iMACD(NULL,0,FastMacd,SlowMacd,9,PRICE_CLOSE,MODE_MAIN,0);
signal=iMACD(NULL,0,FastMacd,SlowMacd,9,PRICE_CLOSE,MODE_SIGNAL,1);
signal_1=iMACD(NULL,0,FastMacd,SlowMacd,9,PRICE_CLOSE,MODE_SIGNAL,0);
RSI=iRSI(NULL,0,RSIperiod,PRICE_CLOSE,1);
RSI_1=iRSI(NULL,0,RSIperiod,PRICE_CLOSE,0);
//--------------------------------------------------------------------------------------------
if (Peresechenie()==1) Open_Buy();
if (Peresechenie()==2) Open_Sell();
//============================================================================================
return;
//============================================================================================
for(int i=0;i<OrdersTotal();i++)
{
if (Zakrytiye()==1) Close_Buy();
if (Zakrytiye()==2) Close_Sell();
}
//============================================================================================
return;
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int Peresechenie() // Функция определения пересечения
{
ret=0;
//============================================================================================
if (macd<signal && macd_1>signal_1 && signal<-Maclevel && RSI_1<RSIlow) ret=1;
//--------------------------------------------------------------------------------------------
if (macd>signal && macd_1<signal_1 && signal>Maclevel && RSI_1>RSIhigh) ret=2;
//============================================================================================
return(ret);
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int Zakrytiye()
{
zak=0;
//============================================================================================
if (macd>signal && macd_1<signal_1 && signal>0) zak=1;
//--------------------------------------------------------------------------------------------
if (macd<signal && macd_1>signal_1 && signal<0) zak=2;
//============================================================================================
return(zak);
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int Open_Buy() // Функция открытия Buy
{
//============================================================================================
if (total<2)
OrderSend(Symbol(),OP_BUY, LotsOptimized(), Ask, 0, Ask-SL, 0, "", 0, 0, Blue);
//============================================================================================
return;
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int Open_Sell() // Функция открытия Sell
{
//============================================================================================
if (total<2)
OrderSend(Symbol(),OP_SELL, LotsOptimized(), Bid, 0, Bid+SL, 0, "", 0, 0, Red);
//============================================================================================
return;
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int Close_Buy()
{
//============================================================================================
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,White);
}
//============================================================================================
return;
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int Close_Sell()
{
//============================================================================================
if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,0,White);
}
//============================================================================================
return;
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
double LotsOptimized()
{
double lot=Lots;
lot=NormalizeDouble(AccountFreeMargin()*0.06/1000.0,2);
if(lot<0.1) lot=0.1;
return(lot);
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
 
а до куда доходит алгоритм ?
 
Eugene1305:

Не закрываются ордера. В чем ошибка?


int Close_Buy()
{
//============================================================================================
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,White);
}
//============================================================================================
return;
}

сначала ордер надо выбрать с помощью OrderSelect, а уже потом использовать его Ticket, Lots и Type

 
total=OrdersTotal();
if (total==2) return;
после двух открытых ордеров код будет курить в сторонке до срабатывания TP/SL.
 
вроде исправил ошибки,но проблема остается:нет ошибок в компиляции,но в тестере срабатывает только стоплос и не работает OrderClose
 

for(int i=0;i<OrdersTotal();i++)

Здесь точно ошибка.

Должно быть:

for (int i = OrdersTotal()-1; i>=0; i--)

 
Eugene1305:
вроде исправил ошибки,но проблема остается:нет ошибок в компиляции,но в тестере срабатывает только стоплос и не работает OrderClose

Ну так еще раз код целиком.

for(int i=0;i<OrdersTotal();i++)
{
if (Zakrytiye()==1) Close_Buy();
if (Zakrytiye()==2) Close_Sell();
}

не наблюдаю выбор ордера, а он функциям Close_xxx пожалуй не помешает.

 

Исправил код,но все изменения никак не сказываются на результате в тестере.

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
extern int FastMacd = 12;
extern int SlowMacd = 26;
extern int RSIperiod = 12;
extern int RSIlow = 40;
extern int RSIhigh = 60;
extern double Lots = 0.3;
extern double Maclevel = 0.00061;
extern double SL = 700;
//--------------------------------------------------------------------------------------------
int
ret,
zak,
total;
//--------------------------------------------------------------------------------------------
double
New_Bar,
Time_0,
macd,
macd_1,
signal,
signal_1,
RSI,
RSI_1;
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int init()
{
//============================================================================================
SL = SL*Point; // СтопЛосс в пунктах
return;
//============================================================================================
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int start()
{
//============================================================================================
total=OrdersTotal();
//--------------------------------------------------------------------------------------------
macd=iMACD(NULL,0,FastMacd,SlowMacd,9,PRICE_CLOSE,MODE_MAIN,1);
macd_1=iMACD(NULL,0,FastMacd,SlowMacd,9,PRICE_CLOSE,MODE_MAIN,0);
signal=iMACD(NULL,0,FastMacd,SlowMacd,9,PRICE_CLOSE,MODE_SIGNAL,1);
signal_1=iMACD(NULL,0,FastMacd,SlowMacd,9,PRICE_CLOSE,MODE_SIGNAL,0);
RSI=iRSI(NULL,0,RSIperiod,PRICE_CLOSE,1);
RSI_1=iRSI(NULL,0,RSIperiod,PRICE_CLOSE,0);
//--------------------------------------------------------------------------------------------
if (Peresechenie()==1) Open_Buy();
if (Peresechenie()==2) Open_Sell();
//============================================================================================
return;
//============================================================================================
if (Zakrytiye()==1) Close_Buy();
if (Zakrytiye()==2) Close_Sell();
//============================================================================================
return;
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int Peresechenie() // Функция определения пересечения
{
ret=0;
//============================================================================================
if (macd<signal && macd_1>signal_1 && signal<-Maclevel && RSI_1<RSIlow) ret=1;
//--------------------------------------------------------------------------------------------
if (macd>signal && macd_1<signal_1 && signal>Maclevel && RSI_1>RSIhigh) ret=2;
//============================================================================================
return(ret);
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int Zakrytiye()
{
zak=0;
//============================================================================================
if (macd>signal && macd_1<signal_1 && signal>0) zak=1;
//--------------------------------------------------------------------------------------------
if (macd<signal && macd_1>signal_1 && signal<0) zak=2;
//============================================================================================
return(zak);
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int Open_Buy() // Функция открытия Buy
{
//============================================================================================
if (total<2)
OrderSend(Symbol(),OP_BUY, LotsOptimized(), Ask, 0, Ask-SL, 0, "", 0, 0, Blue);
//============================================================================================
return;
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int Open_Sell() // Функция открытия Sell
{
//============================================================================================
if (total<2)
OrderSend(Symbol(),OP_SELL, LotsOptimized(), Bid, 0, Bid+SL, 0, "", 0, 0, Red);
//============================================================================================
return;
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int Close_Buy()
{
//============================================================================================
for(int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_TICKET)==true)
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,White);
}
//============================================================================================
return;
}
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int Close_Sell()
{
//============================================================================================
for(int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(123,SELECT_BY_TICKET)==true)
if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,0,White);
}
//============================================================================================
return;
}
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
double LotsOptimized()
{
double lot=Lots;
lot=NormalizeDouble(AccountFreeMargin()*0.06/1000.0,2);
if(lot<0.1) lot=0.1;
return(lot);
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
 
Eugene1305:

Исправил код следующим образом:


int start()
{
//============================================================================================
total=OrdersTotal();
//--------------------------------------------------------------------------------------------
macd=iMACD(NULL,0,FastMacd,SlowMacd,9,PRICE_CLOSE,MODE_MAIN,1);
macd_1=iMACD(NULL,0,FastMacd,SlowMacd,9,PRICE_CLOSE,MODE_MAIN,0);
signal=iMACD(NULL,0,FastMacd,SlowMacd,9,PRICE_CLOSE,MODE_SIGNAL,1);
signal_1=iMACD(NULL,0,FastMacd,SlowMacd,9,PRICE_CLOSE,MODE_SIGNAL,0);
RSI=iRSI(NULL,0,RSIperiod,PRICE_CLOSE,1);
RSI_1=iRSI(NULL,0,RSIperiod,PRICE_CLOSE,0);
//--------------------------------------------------------------------------------------------
if (Peresechenie()==1) Open_Buy();
if (Peresechenie()==2) Open_Sell();
//============================================================================================
return;
Вот сюда программа никогда не дойдет, ибо return
//============================================================================================
if (Zakrytiye()==1) Close_Buy();
if (Zakrytiye()==2) Close_Sell();
//============================================================================================
return;
}
 

ilunga


Спасибо,убрал return, но итог тот же...может,я как-то неправильно использую функцию OrderSelect или не в том месте?



 
Eugene1305:

ilunga


Спасибо,убрал return, но итог тот же...может,я как-то неправильно использую функцию OrderSelect или не в том месте?



if (OrderSelect(123,SELECT_BY_TICKET)==true) //в close SELL
if (OrderSelect(i,SELECT_BY_TICKET)==true)// в close BUY

Решите уж как вы выбираете по номеру ticket или по позиции i, а то какая-то гремучая смесь

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