а до куда доходит алгоритм ?
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
вроде исправил ошибки,но проблема остается:нет ошибок в компиляции,но в тестере срабатывает только стоплос и не работает 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; }
Eugene1305:
Спасибо,убрал return, но итог тот же...может,я как-то неправильно использую функцию OrderSelect или не в том месте?
if (OrderSelect(123,SELECT_BY_TICKET)==true) //в close SELL
if (OrderSelect(i,SELECT_BY_TICKET)==true)// в close BUY
Решите уж как вы выбираете по номеру ticket или по позиции i, а то какая-то гремучая смесь
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Не закрываются ордера. В чем ошибка?