| / | Форум |
|
Kostay
23.04.2010 08:01
Здравствуйте, знатоки!
Подскажите решение моей задачи если оно вообще существует. В приведенном ниже советнике сигнал поставлен на пересечение МА с ценой. Внимание вопрос: Мне интересен сигнал который сработал в первой половине формирования свечи, и неинтересен во второй половине формирования свечи! Как разделить свечу на первую половину и вторую, зможно и на трети? #include <b-Lots.mqh> extern double TrailingStop = 50; extern double Sploss = 30; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double MA_0,MA_1; int i, cnt, ticket, total; bool flag=true; if(Bars<100) { Print("bars less than 100"); return(0); } // Проверяем стоит ли открываться cnt=OrdersHistoryTotal()-1; for(i=cnt;i>=0;i--) { if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY )) continue; if(OrderOpenTime()>=Time[0]) { // Time[0] - если позиция открывается на нулевом баре текущего символа flag=false; break; } } cnt=OrdersTotal()-1; for(i=cnt;i>=0;i--) { if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if(OrderOpenTime()>=Time[0]) { // Time[0] - если позиция открывается на нулевом баре текущего символа flag=false; break; } } if(!flag) return(0); //----------------------------------------------- MA_0=iMA(0,0,3,0,MODE_SMA,PRICE_CLOSE,0); MA_1=iMA(0,0,3,0,MODE_SMA,PRICE_CLOSE,1); //задали все данные total=OrdersTotal(); if(total<1) { // Проверка свободной маржи if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } // Условие открытие позиции BUY if(MA_1<MA_0&&Ask<=MA_0) { Lots=GetSizeLot(); ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Sploss,0,"",16384,0,Green); 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(MA_1>MA_0&&Bid>=MA_0) { Lots=GetSizeLot(); ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,5,Sploss,0,"",16384,0,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 && OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) // длинная позиция открыта { // трейлинг-стоп для длинной позиции if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green); return(0); } } } } else { // трейлинг-стоп для короткой позиции if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); return(0); } } } } } } return(0); }Обяъсните пожалуйста с примером кода на данном советнике. Моя первая мысль была: нужно лезть на младшие периоды, но это уже все другое. Не подходит. |
|
Организуйте багтрекинг и техсаппорт для своей компании В TeamWox имеются все для того чтобы организовать багтрекинг. Интегрировав модуль Сервисдеск с веб-сайтом, Вы сможете получать заявки своих клиентов напрямую в TeamWox. Более того, вся переписка с клиентами автоматически распознается и попадает в архив, где ее без труда можно найти в будущем. |
|
marketeer
23.04.2010 11:42
Получаете временной диапазон свечи как Period()*60. Делите его на столько частей, сколько вам нужно, например на 2 или 3 - получаете временной порог внутри свечи (limit). Потом при приходе нового тика проверяете дельту TimeCurrent() - Time[0] > limit.
|
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий