Ну хоть кто-нибудь, ответьте?
А что тут отвечать? Ошибка на ошибке сидит и ошибкой погоняет.
1. Где проверка на длинную или короткую?
2. Что за переменная ticket и где ей присваивается значение?
3. По какой цене должна закрываться короткая, а по какой длинная?
Это только то, что я заметил, мельком глянув на Ваше "произведение". Возможно есть еще баги.
Закрывают так
for(i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue;
if (OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY && Условие )
ret=OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);
if (OrderType()==OP_SELL && Условие )
ret=OrderClose(OrderTicket(),OrderLots(),Ask,0,CLR_NONE);
}}
Если условие верно . Добавите своё.
Перебирать надо ордера,что бы найти тот который нужен
for(i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue;
if (OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY && Условие )
ret=OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);
if (OrderType()==OP_SELL && Условие )
ret=OrderClose(OrderTicket(),OrderLots(),Ask,0,CLR_NONE);
}}
Если условие верно . Добавите своё.
Перебирать надо ордера,что бы найти тот который нужен
вот мой весь советник. первая часть - покупка - работает, а остальное не работает.
очень хотелось бы доделать советник.
заранее спасибо!
очень хотелось бы доделать советник.
заранее спасибо!
//+------------------------------------------------------------------+/ extern double MACD_present; extern double MACD_last; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int total; int i; double ticket; int Percent =10; // % свободных средств double Free =AccountFreeMargin(); // свободные стредства double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED); //стоимость одного лота double Step =MarketInfo(Symbol(),MODE_LOTSTEP); // шаг размера double Lots_New =MathFloor(Free*Percent/100/One_Lot/Step)*Step; bool ret; MACD_present = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); // Вычисление текущее значения MACD MACD_last = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); // Вычисление прошлое значения MACD total=OrdersTotal(); //всего открытых ордеров if(total<1) // открываем позицию, если нет ниодной открытой позиции //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ { if(AccountFreeMargin()<(1000*Lots_New)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ if (MACD_present>0 && MACD_last<0) //Buy { ticket=OrderSend (Symbol(), OP_BUY, Lots_New, Ask,0,0,0, "MACD!", 123, 0, Green); Comment("_ticket=", ticket ); } if (MACD_present<0 && MACD_last>0) //Sell { ticket=OrderSend (Symbol(), OP_SELL, Lots_New, Bid,0,0,0, "MACD!", 123, 0, Green); Comment("_ticket=", ticket ); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //else //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ if(total == 1) // закрываем позицию, если есть открытая позиция /*{ if(OrderSelect(ticket,SELECT_BY_POS)==true) { if (MACD_present<0 && MACD_last>0) //Close korotkuju { Print("Смена тренада 1 "); OrderClose(ticket,OrderLots(),Bid,3,Red); return(0); } if (MACD_present>0 && MACD_last<0) //Close dlinnuju { Print("Смена тренада 2 "); OrderClose(ticket,OrderLots(),Ask,3,Red); return(0); } } */ //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ } } return;
Для тебя принципиально именно этот текст, здесь ошибки будешь долго исправлять. Особенно если не знаешь. Может тебе похожее подойдёт.
Я сам не программист, но самостоятельно и с помощью форума пытаюсь осуществить эту идею. очень надо :)
#include <stdlib.mqh> #include <stderror.mqh> extern double Lots = 0.5; extern int SL = 50; extern int TP = 50; int r,ret,B,S,N=0; int init() { } int start() { int Orders_B=0,Orders_S=0,Tic_B=0,Tic_S=0; B=0;S=0; //Проверим что имеем for(int r=0;r<OrdersTotal();r++) // { if(OrderSelect(r,SELECT_BY_POS,MODE_TRADES)==false) continue; if(OrderSymbol()==Symbol() && OrderMagicNumber()==111999) { if (OrderType()==OP_BUY) {Orders_B++;Tic_B=OrderTicket();} if (OrderType()==OP_SELL) {Orders_S++;Tic_S=OrderTicket();} }} // Возьмём сигнал int Sig=Signal(); //if (Sig==0) return(0); if (Sig==1 && Tic_B==0 ) ret=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-SL*Point,Ask+TP*Point,"Cross_MA",111999,0,Blue); if (Sig==2 && Tic_S==0) ret=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+SL*Point,Bid-TP*Point,"Cross_MA",111999,0,Red); if (Sig==2 && Tic_B!=0) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); if (Sig==1 && Tic_S!=0) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); for(int r1=0;r1<OrdersTotal();r1++) // { if(OrderSelect(r1,SELECT_BY_POS,MODE_TRADES)==false) continue; if(OrderSymbol()==Symbol() && OrderMagicNumber()==111999) { if (OrderType()==OP_BUY ) { if (Bid-OrderStopLoss()>(SL+5)*Point) ret=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()+5*Point,OrderTakeProfit(),0,CLR_NONE); if (Signal()==2) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); } if (OrderType()==OP_SELL) { if (Signal()==1) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); if (OrderStopLoss()-Ask>(SL+5)*Point) ret=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()-5*Point,OrderTakeProfit(),0,CLR_NONE); } }} } // Это функция сигнала меняй что хочешь int Signal() { double MACD_S=iMACD(NULL,0,12,26,1,PRICE_CLOSE,MODE_SIGNAL,0); if (MACD_S>0) return (1); if (MACD_S<0) return (2); return(0); }Вроде работает, условия вроде твои. Попробуй,если чего не так пиши исправлю. Вообще условия свои можешь поставить.
спасибо, сейчас посмотрю.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
по подобию этого кода написал код выхода из рынка тоже по сигналу IMACD - но этот не работает. кусок кода привожу ниже. что можно было бы подправить? Заранее спасибо!