А при чём здесь "сломайте мой советник"? Это по мотивам "ломай меня полностью" чтоль? ))
//+------------------------------------------------------------------+
//| FIBO_harmonious.mq4 |
//+------------------------------------------------------------------+
//+ Other: Radishevskiy Alekcey Sergeevich :*******+
//+ Programmin: Nelzin Yriu :*********** +
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
extern bool time_on=False;//если True то первую свечу по времени, если False то по линии
extern int hour_start=21;//час первой свечи справа за пиковой
extern int minute_start=10;//минута первой свечи справа за пиковой
extern double tek_lot=1;//лот - если 0, то будет расчитан из % риска
int sl=15;//стоплосс в пунктах
extern double k_tp=1.5;//коэффициент для 1-й формулы
extern double k_napr_1=0.6180;//1 коэффициент для 2-й формулы
extern double k_napr_2=1.6180;//2 коэффициент для 2-й формулы
extern int max_tp=70;//максимальный профит в пунктах
extern int min_tp=20;//минимальный профит в пунктах
extern int Risk=1;//процент риска на 1 сделку
extern bool spread_stop=False;//учитывать потерю спреда и стопа в следующей сделке
extern double Lots_New=0.01;
extern string lin="777";//имя линии
int tp,napr;
bool SellOp, BuyOp;
int i,total,ticket, razr=0;
int otkr_b=0, otkr_s=0;
double O,C,L,H;
double pr_h, pr_l;//уровни пробития
datetime sStartTime;//дата линии
double tek_tp;
bool fractal_low=False;
bool fractal_high=False;
double lot1;
double pp=1;//стоимость 1 пункт/лота
datetime time1;
int spread;
double profit1;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start(){///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(Bars<100){
Print("bars less than 100");
return(0);
}
set_pos();
{//первая свеча для теста===================================================
{//смотрим указанное время для свечи
if(H!=L)
{
tp=sl=NormalizeDouble(MathAbs(((O-C)/(H-L)*k_tp/100)/Point),0);
tp=sl=NormalizeDouble(tp-MarketInfo(Symbol(),MODE_SPREAD),0);
napr=MathFloor(MathAbs((O-C)/(H-L)*k_napr_1*k_napr_2*100)); // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++1
if(napr*0.5==MathFloor(napr*0.5)&&napr>0){tek_tp=C+tp*Point;if(tp>=min_tp&&tp<=max_tp){BuyOp=True;SellOp=False;}}
if(napr*0.5!=MathFloor(napr*0.5)&&napr>0){tek_tp=C-tp*Point;if(tp>=min_tp&&tp<=max_tp){BuyOp=False;SellOp=True;}}
}
if(H==L){Comment("error");}
set_lot();
if(spread_stop==True)
{//spread_stop================================================
spread = MarketInfo(Symbol(),MODE_SPREAD);
set_history();
if(profit1<0)
{//если последняя сделка закрылась по стопу
Lots_New = NormalizeDouble(((((lot1*spread)+(lot1*sl))/tp +lot1) +(lot1/tp*sl)+(lot1*spread/tp))/pp,2);
if(Lots_New==lot1){Lots_New=lot1+0.01;}
}//если последняя сделка закрылась по стопу
}//spread_stop================================================
if (BuyOp == True&&SellOp==False&&otkr_b==0&&otkr_s==0){ticket = OrderSend(Symbol(),OP_BUY, Lots_New ,Ask, 3, Bid-sl*Point, Ask + tp*Point, "21082012", 21082012, 0, Green);if(ticket>0){razr=1;pr_h=Ask+tp*Point;pr_l=Bid-tp*Point;time_on=false;}}
if (SellOp == True&&BuyOp==False&&otkr_b==0&&otkr_s==0){ticket = OrderSend(Symbol(), OP_SELL,Lots_New,Bid, 3, Ask+sl*Point, Bid - tp*Point, "21082012", 21082012, 0, Red);if(ticket>0){razr=1;pr_h=Ask+tp*Point;pr_l=Bid-tp*Point;time_on=false;}}
Comment(sStartTime, " Open=", O, " Close=",C , " High=",H," Low=",L," tp=",tp," NAPR=",napr," tek_tp=",tek_tp," lot=",Lots_New);
}//смотрим указанное время для свечи
}//первая свеча для теста==================================================
if(ObjectFind(lin)!=-1&&razr==0&&time_on==False)
{//есть такая линия=============================================================================================================
sStartTime = ObjectGet("777", OBJPROP_TIME1);
O=Open[iBarShift(Symbol(), PERIOD_M5, sStartTime)];
C=Close[iBarShift(Symbol(), PERIOD_M5, sStartTime)];
H=High[iBarShift(Symbol(), PERIOD_M5, sStartTime)];
L=Low[iBarShift(Symbol(), PERIOD_M5, sStartTime)];
SellOp=False;
BuyOp=False;
if(H!=L)
{
tp=sl=NormalizeDouble(MathAbs(((O-C)/(H-L)*k_tp/100)/Point),0);
tp=sl=NormalizeDouble(tp-MarketInfo(Symbol(),MODE_SPREAD),0);
napr=MathFloor(MathAbs((O-C)/(H-L)*k_napr_2*k_napr_2*100));//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2
if(napr*0.5==MathFloor(napr*0.5)&&napr>0){tek_tp=C+tp*Point;if(tp>=min_tp&&tp<=max_tp){BuyOp=True;SellOp=False;}}
if(napr*0.5!=MathFloor(napr*0.5)&&napr>0){tek_tp=C-tp*Point;if(tp>=min_tp&&tp<=max_tp){BuyOp=False;SellOp=True;}}
}
if(H==L){Comment("error");}
set_lot();
if(spread_stop==True)
{//spread_stop================================================
spread = MarketInfo(Symbol(),MODE_SPREAD);
set_history();
if(profit1<0)
{//если последняя сделка закрылась по стопу
Lots_New = NormalizeDouble(((lot1*spread)+(lot1*sl))/tp +lot1 +(lot1/tp*sl)+(lot1*spread/tp)/pp,2);
if(Lots_New==lot1){Lots_New=lot1+0.01;}
}//если последняя сделка закрылась по стопу
}//spread_stop================================================
if (BuyOp == True&&SellOp==False&&otkr_b==0&&otkr_s==0){ticket = OrderSend(Symbol(),OP_BUY, Lots_New ,Ask, 3, Bid-sl*Point, Ask + tp*Point, "21082012", 21082012, 0, Green);if(ticket>0){razr=1;pr_h=Ask+tp*Point;pr_l=Bid-tp*Point;}}
if (SellOp == True&&BuyOp==False&&otkr_b==0&&otkr_s==0){ticket = OrderSend(Symbol(), OP_SELL,Lots_New,Bid, 3, Ask+sl*Point, Bid - tp*Point, "21082012", 21082012, 0, Red);if(ticket>0){razr=1;pr_h=Ask+tp*Point;pr_l=Bid-tp*Point;}}
Comment(sStartTime, " Open=", O, " Close=",C , " High=",H," Low=",L," tp=",tp," NAPR=",napr," tek_tp=",tek_tp," lot=",Lots_New);
}//есть такая линия===========================================================================================================
if(time_on==False)
{//если время не задано
if(ObjectFind(lin)==-1||razr==1)
{//нет линии=============================================================================================================
if(razr==0)//0
{//
O=iOpen(Symbol(), PERIOD_M5, 3);
C=iClose(Symbol(), PERIOD_M5, 3);
H=iHigh(Symbol(), PERIOD_M5, 3);
L=iLow(Symbol(), PERIOD_M5, 3);
}//
if(razr==1)//1
{//
O=iOpen(Symbol(), PERIOD_M5, 3);
C=iClose(Symbol(), PERIOD_M5, 3);
H=iHigh(Symbol(), PERIOD_M5, 3);
L=iLow(Symbol(), PERIOD_M5, 3);
}//
SellOp=False;
BuyOp=False;
if(H!=L)
{
tp=sl=NormalizeDouble(MathAbs(((O-C)/(H-L)*k_tp/100)/Point),0);
tp=sl=NormalizeDouble(tp-MarketInfo(Symbol(),MODE_SPREAD),0);
napr=MathFloor(MathAbs((O-C)/(H-L)*k_napr_1*k_napr_2*100));
if(napr*0.5==MathFloor(napr*0.5)&&napr>0){tek_tp=C+tp*Point;if(tp>=min_tp&&tp<=max_tp){BuyOp=True;SellOp=False;}}
if(napr*0.5!=MathFloor(napr*0.5)&&napr>0){tek_tp=C-tp*Point;if(tp>=min_tp&&tp<=max_tp){BuyOp=False;SellOp=True;}}
}
if(H==L){Comment("error");}
if(razr==0)
{//если первая сделка
fractal_low=False;fractal_high=False;set_fractal();set_lot();
if(spread_stop==True)
{//spread_stop================================================
spread = MarketInfo(Symbol(),MODE_SPREAD);
set_history();
if(profit1<0)
{//если последняя сделка закрылась по стопу
Lots_New = NormalizeDouble(((lot1*spread)+(lot1*sl))/tp +lot1 +(lot1/tp*sl)+(lot1*spread/tp)/pp,2);
if(Lots_New==lot1){Lots_New=lot1+0.01;}
}//если последняя сделка закрылась по стопу
}//spread_stop================================================
if (fractal_low==True&&BuyOp == True&&SellOp==False&&otkr_b==0&&otkr_s==0&&(tek_tp-Ask)/Point>10){ticket = OrderSend(Symbol(),OP_BUY, Lots_New ,Ask, 3, Bid-sl*Point, Ask + tp*Point, "21082012", 21082012, 0, Green);if(ticket>0){razr=1;pr_h=Ask+tp*Point;pr_l=Bid-tp*Point;}}
if (fractal_high==True&&SellOp == True&&BuyOp==False&&otkr_b==0&&otkr_s==0&&(Bid-tek_tp)/Point>10){ticket = OrderSend(Symbol(), OP_SELL,Lots_New,Bid, 3, Ask+sl*Point, Bid - tp*Point, "21082012", 21082012, 0, Red);if(ticket>0){razr=1;pr_h=Ask+tp*Point;pr_l=Bid-tp*Point;}}
Comment(sStartTime, " Open=", O, " Close=",C , " High=",H," Low=",L," tp=",tp," NAPR=",napr," tek_tp=",tek_tp," pr_h==",pr_h," pr_l=",pr_l," lot=",Lots_New," balance=",AccountBalance()," marga=",AccountFreeMargin());
}//если первая сделка
if(razr==1)
{//если не первая сделка
set_lot();
if(spread_stop==True)
{//spread_stop================================================
spread = MarketInfo(Symbol(),MODE_SPREAD);
set_history();
if(profit1<0)
{//если последняя сделка закрылась по стопу
Lots_New = NormalizeDouble(((lot1*spread)+(lot1*sl))/tp +lot1 +(lot1/tp*sl)+(lot1*spread/tp)/pp,2);
if(Lots_New==lot1){Lots_New=lot1+0.01;}
}//если последняя сделка закрылась по стопу
}//spread_stop================================================
if (BuyOp == True&&SellOp==False&&otkr_b==0&&otkr_s==0&&(tek_tp-Ask)/Point>10&&Ask>pr_h){ticket = OrderSend(Symbol(),OP_BUY, Lots_New ,Ask, 3, Bid-sl*Point, Ask + tp*Point, "21082012", 21082012, 0, Green);if(ticket>0){razr=1;pr_h=Ask+tp*Point;pr_l=Bid-tp*Point;}}
if (SellOp == True&&BuyOp==False&&otkr_b==0&&otkr_s==0&&(Bid-tek_tp)/Point>10&&Bid<pr_l){ticket = OrderSend(Symbol(), OP_SELL,Lots_New,Bid, 3, Ask+sl*Point, Bid - tp*Point, "21082012", 21082012, 0, Red);if(ticket>0){razr=1;pr_h=Ask+tp*Point;pr_l=Bid-tp*Point;}}
Comment(sStartTime, " Open=", O, " Close=",C , " High=",H," Low=",L," tp=",tp," NAPR=",napr," tek_tp=",tek_tp," pr_h==",pr_h," pr_l=",pr_l," lot=",Lots_New," balance=",AccountBalance()," marga=",AccountFreeMargin());
}//если не первая сделка
}//нет линии=============================================================================================================
}//если время не задано
return (0);
}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void set_pos()
{
total=OrdersTotal();
otkr_s=0; otkr_b=0;
for(i=0;i<total;i++) {//перебор всех открытых ордеров
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol())
{///
if(OrderType()==OP_SELL && OrderMagicNumber()==21082012) //OP_SELL
{////
otkr_s=1;
}////
if(OrderType()==OP_BUY && OrderMagicNumber()==21082012) //OP_BUY
{////
otkr_b=1;
}////
}///
}//перебор всех открытых ордеров
}
void set_fractal()
{
if(iHigh(Symbol(),PERIOD_M5,3)>iHigh(Symbol(),PERIOD_M5,5)&&iHigh(Symbol(),PERIOD_M5,3)>iHigh(Symbol(),PERIOD_M5,4)&&iHigh(Symbol(),PERIOD_M5,3)>iHigh(Symbol(),PERIOD_M5,2)&&iHigh(Symbol(),PERIOD_M5,3)>iHigh(Symbol(),PERIOD_M5,1)){fractal_high=True;}
if(iLow(Symbol(),PERIOD_M5,3)<iLow(Symbol(),PERIOD_M5,5)&&iLow(Symbol(),PERIOD_M5,3)<iLow(Symbol(),PERIOD_M5,4)&&iLow(Symbol(),PERIOD_M5,3)<iLow(Symbol(),PERIOD_M5,2)&&iLow(Symbol(),PERIOD_M5,3)>iLow(Symbol(),PERIOD_M5,1)){fractal_low=True;}
}
void set_lot()
{
double Free =AccountFreeMargin(); // Свободные средства
double maxlot=Free/(100*((Ask+Bid)/2));
if(tek_lot==0)
{//если размер лота не задан
double One_Lot=MarketInfo(Symbol(),MODE_MARGINREQUIRED);//Стоим. 1 лота
double Min_Lot=MarketInfo(Symbol(),MODE_MINLOT);// Мин. размер. лотов
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);//Шаг изменен размера
double LotVal =MarketInfo(Symbol(),MODE_TICKVALUE);//стоимость 1 пункта для 1 лота
Lots_New =MathFloor((Free*Risk/1000)/(sl*LotVal)/Step)*Step;
if(Lots_New<Min_Lot){Lots_New=Min_Lot;}
if(Lots_New>Max_Lot) {Lots_New=Max_Lot;}
if(Lots_New>maxlot){Lots_New=maxlot;}
Lots_New=NormalizeDouble(Lots_New,2);
int time=0;
double Lots_Old=0;
double profit_old=0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--) {
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) break;
if(((OrderMagicNumber()==21082012))
&& ((OrderSymbol()==Symbol()))
&& OrderCloseTime()>time) {
time=OrderCloseTime();
Lots_Old=OrderLots();
profit_old=OrderProfit();
}
}
if(profit_old<0){Lots_New=Lots_Old;if(Lots_New>maxlot){Lots_New=maxlot;}}
}//если размер лота не задан
if(tek_lot!=0){Lots_New=tek_lot;if(Lots_New>maxlot){Lots_New=maxlot;}}//если размер лота задан вручную
}
void set_history()
{
total=OrdersHistoryTotal();
time1=0;
for(i=0;i<total;i++) {//перебор всех открытых ордеров
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if(OrderSymbol()==Symbol())
{///
if(OrderType()==OP_SELL || OrderType()==OP_BUY)
{////
if(OrderMagicNumber()==21082012)
{////
if(OrderCloseTime()>time1)
{/////
time1 = OrderCloseTime();
lot1 = OrderLots();
profit1= OrderProfit();
}/////
}////
}////
}///
}//перебор всех открытых ордеров
}
Подскажите. Где тут что сделать. Чтобы каждую новую свечу, советник выставлял сделку. ? Потому что сейчас советник ждёт стопа. и после выставляет сделку.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Нужно сделать чтобы после каждой завершённой свечки, сов выставлял сделку согласно всем заложенным в него условиям.
Ссылка на скачивание http://www.forexdengi.com/attachment...8&d=1367836099 , тема советника моя тут http://www.forexdengi.com/threads/44...iya-c-sovetnik .
На данный момент. Сов берёт данные 5 минутной свечки ( или любого тайм фрейма, который выставлен на графике ) и согласно всем данным открывает сделку. И ждёт исполнения закрытия этой сделки. И уже после всех нюансов, выставляет сделку.
Нужно сделать так, чтобы каждую 5 минутную свечу ( если это 5 минут тайм фрейм ), выставлялась сделка согласно тем условиям что заложены в сов. Разумеется, там стоит фильтр на мин и макс. профиты. И если сделка попадает в этот фильтр то она не выставляется. ( но в сове это всё и так прописано ). Т.е вам надо сделать только чтобы он каждую свечку выставлял сделку)
Т.е выглядеть это будет так: 5 минут свеча закрылась. Советник произвёл нужные подсчёты. Выставил сделку тем лотом, что прописано в сове. Дальше следующая 5 минут свеча закрылась, и открылась сделка. И так каждая завершённая свеча является причиной открытия сделки.
*** Ну. Ни хочу привлекать лишнее внимание. Но я участвовал им в http://championship.mql5.com/2012/ru/users/Alekcey . Очень и Очень жаль, что перестал быть такой конкурс. Было очень весело в нём участвовать. Столько людей. Столько знакомств. :)