Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Всем спасибо за помощь!
//+------------------------------------------------------------------+ //| Serfing.mq4 | //| Zmey | //| xzmey@yandex.ru | //+------------------------------------------------------------------+ extern double StopLoss = 50; extern double TakeProfit = 30; extern double TrailingStop = 15; extern double Lots = 0.1; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int cnt=0, ticket, total, handle, bars=Bars; // теперь надо определится в какок состоянии торговый терминал? // проверим, есть ли ранее открытые позиции или ордеры? total=OrdersTotal(); if(total<1) { // нет ниодного открытого ордера // на всякий случай проверим, есть ли у нас свободные деньги на счету? if(AccountFreeMargin()<(3000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); // денег нет-выходим } //проверяем возможность открытия позиции по BAY if(High[4]>High[3] && High[2]<High[3] && High[1]>High[2] && Open[1]>=Close[2]) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask+TakeProfit*Point,Ask-StopLoss*Point, "serfing sample",3,Red); //исполняем if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } else Print("Error opening BUY order : ",GetLastError()); return(0); } //проверяем возможность открытия позиции по SELL if(High[4]<High[3] && High[2]>High[3] && High[1]<High[2]) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid-TakeProfit*Point,Bid+StopLoss*Point, "serfingsample",3,Red); //исполняем if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } else Print("Error opening SELL order : ",GetLastError()); return(0); } return(0); } //переходим к важной части эксперта - контролю открытых позиций //`важно правильно войти в рынок, но выйти - еще важнее...` for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // это открытая позиция? OP_BUY или OP_SELL OrderSymbol()==Symbol()) //инструмент совпадает? { if(OrderType()==OP_BUY) //открыты позиция BUY { //проверим, может пора закрывать позицию? if(Bid<OrderOpenPrice()) //позиция в убытке то: { if(CurTime()-OrderOpenTime()>14400) //позиция открыта более 3 баров { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //закрываем позицию return(0); //выходим } if(High[4]<High[3] && High[2]>High[3] && High[1]<High[2] && Open[1]<=Close[2]) //разворот движения { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //закрываем позицию return(0); //выходим } } if(Bid>OrderOpenPrice()) //позиция в прибыли то: { if(Bid<=OrderOpenPrice()+8*Point) //прошли 8 пунктов { if(Bid<=OrderOpenPrice()) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //закрываем позицию return(0); //выходим } } if(Bid==OrderOpenPrice()+10*Point) //прошли 10 пунктов { if(Bid<=OrderOpenPrice()+5*Point) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //закрываем позицию return(0); //выходим } } if(Bid==OrderOpenPrice()+15*Point) //прошли 15 пунктов { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-5*Point*StopLoss,OrderTakeProfit(),0,Red); return(0); } if(High[4]<High[3] && High[2]>High[3] && High[1]<High[2] && Open[1]<=Close[2]) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //закрываем позицию return(0); //выходим } } } if(OrderType()==OP_SELL) //открыта позиция SELL { //проверим, может пора закрывать позицию? if(Ask>OrderOpenPrice()) //позиция в убытке то: { if(CurTime()-OrderOpenTime()>14400) //позиция открыта более 3 баров { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //закрываем позицию return(0); //выходим } if(High[4]>High[3] && High[2]<High[3] && High[1]>High[2] && Open[1]>=Close[2]) //разворот движения { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //закрываем позицию return(0); //выходим } } if(Ask<OrderOpenPrice()) //позиция в прибыли то: { if(Ask>=OrderOpenPrice()+8*Point) //прошли 8 пунктов { if(Ask>=OrderOpenPrice()) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //закрываем позицию return(0); //выходим } } if(Ask==OrderOpenPrice()+10*Point) //прошли 10 пунктов { if(Ask>=OrderOpenPrice()+5*Point) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //закрываем позицию return(0); //выходим } } if(Ask==OrderOpenPrice()+15*Point) //прошли 15 пунктов { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+5*Point*StopLoss,OrderTakeProfit(),0,Red); return(0); } if(High[4]>High[3] && High[2]<High[3] && High[1]>High[2] && Open[1]>=Close[2]) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //закрываем позицию return(0); //выходим } } } } return(0); } } // конец.заранее спасибо.
И посмотри, нет ли в логах сообщений...
1. вывод контрольных значений
2. отсекание отдельных кусков кода и проверка правильности их работы
:)
поверь если сам найдешь ошибки это будет лучше для тебя, а тем кто это умеет нужен стимул
А вообще, тренироваться порще на скриптах. Например, сделай скрипт, который при определённом условии откроет позицию. А потом - другой, который закроет, и т.д. Так, по маленьким кускам, проще разбираться...