//нннннннннннннннннннннннннннн// // 2009г MARTIN // //нннннннннннннннннннннннннннн// extern bool test=false; extern bool open_buy=true; extern bool open_sell=true; extern double chag=36; // начальный шаг //31 ~ 30-37 extern double prf_plus=56; // от нейтр. до уровня профита // ~ 40-50 пт. extern double k_chag=1.4; // коэфф. увеличение шага ~ 1-2; extern int risk=3; // точка риска 1-9 extern double Lots = 0.01; // начальный лот extern double k_lot=1.7; // увеличение объема ~ 1.5-2; extern double lot_max=100; // максимальный лот int magic = 98764; int kn=9; double cann[],can_2[],pric[],pun[],prof[];// cann шаг: cann[0] весь канал: pric провал: pun провал/профит ноль: int kh,c,as,ab,asl,abl,objtot,tm,minStop,can,stp,wvb,wvs,b_ind,s_ind; double ad,k,lg,max,min,max_ind,max_ind2,min_ind,min_ind2,pnk,sel_prs,buy_prs,sel_ind,buy_ind,or_bu,or_sl,objbu,objsl; bool sos_s, sos_b, bb=false, ss=false; int init() { //нннннннннннннннннннннннннннн// //prf_plus=chag; ArrayResize(cann,kn+1); ArrayResize(can_2,kn+1); ArrayResize(pric,kn+1); ArrayResize(pun,kn+1); ArrayInitialize(cann,0.0); ArrayInitialize(can_2,0.0); ArrayInitialize(pric,0.0); ArrayInitialize(pun,0.0); ArrayResize(prof,kn+1); ArrayInitialize(prof,0.0); lg=k_chag; ad=Lots; kh=0; while(ad1) c=0; // пока не догрузиться история i=Bars-c; c=Bars; //============// добавить немного соли //=================// for (y=0;yOrderTicket()||tikt_b==0)){tikt_b=OrderTicket(); stp_b=OrderStopLoss(); prs_b=OrderOpenPrice(); if(stp_b!=OrderOpenPrice()-stp*Point) stp_b=OrderOpenPrice()-stp*Point; } //для стопа if(OrderType()==OP_SELL&&(tikt_s>OrderTicket()||tikt_s==0)){tikt_s=OrderTicket(); stp_s=OrderStopLoss(); prs_s=OrderOpenPrice(); if(stp_s!=OrderOpenPrice()+stp*Point) stp_s=OrderOpenPrice()+stp*Point;} //для стопа if (OrderType()==OP_BUYLIMIT) tick_blm = OrderTicket(); if (OrderType()==OP_SELLLIMIT) tick_slm = OrderTicket();} if(ghb==1)y_buy--; if(ghs==1)y_sel--; //==========// chag_sel=chag; chag_buy=chag; if(y_buy>0)chag_buy=NormalizeDouble(cann[y_buy],0); if(y_sel>0)chag_sel=NormalizeDouble(cann[y_sel],0); //=====// виртуалка //=====// if(Ask>buy_prs && or_bu<=0) {buy_prs=Ask; buy_ind=Ask;} if((Ask=MathFloor(prf_plus+chag/2) && or_bu>0){buy_prs=Ask; buy_ind=Ask; or_bu=0;} if(tick_b==0 && b_ind>0){buy_prs=Ask; buy_ind=Ask; or_bu=0;} if((Bidsel_prs && Bid>sel_ind) sel_ind=Bid; or_sl=MathFloor((sel_ind-sel_prs)/Point/chag); // виртуальные ордера if((sel_ind-Ask)/Point>=MathFloor(prf_plus+chag/2) && or_sl>0){sel_prs=Bid; sel_ind=Bid; or_sl=0;} if(tick_s==0 && s_ind>0) {sel_prs=Bid; sel_ind=Bid; or_sl=0;} if(!IsTesting()){GlobalVariableSet("time",TimeLocal()); GlobalVariableSet("lg_buy_prs",buy_prs); GlobalVariableSet("lg_buy_ind",buy_ind); GlobalVariableSet("lg_sel_prs",sel_prs); GlobalVariableSet("lg_sel_ind",sel_ind);} //==========// if(prs_b!=0)mxx=prs_b; if(prs_s!=0)mnn=prs_s; max_ind=mxx-can*Point; min_ind=mnn+can*Point; //=======// варить 15 мин //============// if(tick_b>0) bb=false; if(tick_s>0) ss=false; if(tick_b==0 && (or_bu!=risk || risk==0)) bb=true; if(tick_s==0 && (or_sl!=risk || risk==0)) ss=true; if(or_bu==risk && tick_b==0 && bb==true) op_by=true; if(or_sl==risk && tick_s==0 && ss==true) op_sl=true; //=====// sound //====// if(or_bu!=risk-1 && or_sl!=risk-1) wvb=0; if(or_bu!=risk && or_sl!=risk) wvs=0; if((or_bu==risk-1 || or_sl==risk-1) && wvb==0) {PlaySound("vot.wav"); wvb=1;} if((or_bu==risk || or_sl==risk) && wvs==0) {PlaySound("смотри.wav"); wvs=1;} b_ind=tick_b; s_ind=tick_s; //==================// для open buy if(tick_b==0){ if(tick_blm!=0){OrderDelete(tick_blm); err=GetLastError(); if(err!=0){fn(err);PlaySound("alert2.wav");Alert("buy delete");}} // open_buy if(open_buy&&op_by){kk=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"mg"+magic,magic); err=GetLastError(); if(err!=0){fn(err);PlaySound("alert2.wav"); Alert("open buy");} if(kk>0){OrderSelect(kk,SELECT_BY_TICKET); st=OrderOpenPrice()-stp*Point; pf=OrderOpenPrice()+prf_plus*Point; bb=false; OrderModify(OrderTicket(),OrderOpenPrice(),st,pf,0); err=GetLastError(); if(err!=0){fn(err);PlaySound("alert2.wav"); Alert("open buy modify");} } // для kk>0 } // для open_buy } // для tick_b==0 if(tick_s==0){ if(tick_slm!=0){OrderDelete(tick_slm); err=GetLastError(); if(err!=0){fn(err);PlaySound("alert2.wav");Alert("sell delete");}} // open_sell if(open_sell&&op_sl){kk=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"mg"+magic,magic); err=GetLastError(); if(err!=0){fn(err);PlaySound("alert2.wav");Alert("open sell");} if(kk>0){OrderSelect(kk,SELECT_BY_TICKET); st=OrderOpenPrice()+stp*Point; pf=OrderOpenPrice()-prf_plus*Point; ss=false; OrderModify(OrderTicket(),OrderOpenPrice(),st,pf,0); err=GetLastError(); if(err!=0){fn(err);PlaySound("alert2.wav"); Alert("open sell modify");} } // для kk>0 } // для open_sell } // для tick_s==0 //==================// для buy_limit //===========================// if(tick_b>0&&tick_blm==0&&lots_b*2=minStop){ OrderSend(Symbol(),OP_BUYLIMIT,lot,prc,3,stp_b,pf,"mg"+magic,magic,0); err=GetLastError(); if(err!=0){fn(err);PlaySound("alert2.wav"); Alert("buy limit");}}} //==================// для sell_limit //==========================// if(tick_s>0&&tick_slm==0&&lots_s*2=minStop){ OrderSend(Symbol(),OP_SELLLIMIT,lot,prc,3,stp_s,pf,"mg"+magic,magic,0); err=GetLastError(); if(err!=0){fn(err);PlaySound("alert2.wav"); Alert("sell limit");}}} //==================// модиф открытых buy ордеров //===========================// for (y=0;y0 && (i>=1 || objtot!=ObjectsTotal() || objbu!=buy_ind+MathFloor(prf_plus+chag/2)*Point)){ objbu=buy_ind+MathFloor(prf_plus+chag/2)*Point; if(ObjectFind("clsbuy")==-1) //-1 нет линии, 0(else) - есть линия. {ObjectCreate("clsbuy",2,0,Time[0]+Period()*120,objbu,Time[0]+Period()*240,objbu); ObjectSet("clsbuy",10,0);ObjectSet("clsbuy",6,Magenta); ObjectSet("clsbuy",8,3);} else{ObjectSet("clsbuy",1,objbu); ObjectSet("clsbuy",3,objbu); ObjectSet("clsbuy",0,Time[0]+Period()*120); ObjectSet("clsbuy",2,Time[0]+Period()*240);}} //=========================// if(or_sl==0 && ObjectFind("clsel")==0) ObjectDelete("clsel"); //-1 нет объекта , 0(else) - есть объект. if(or_sl>0 && (i>=1 || objtot!=ObjectsTotal() || objsl!=sel_ind-MathFloor(prf_plus+chag/2)*Point)){ objsl=sel_ind-MathFloor(prf_plus+chag/2)*Point; if(ObjectFind("clsel")==-1) //-1 нет линии, 0(else) - есть линия. {ObjectCreate("clsel",2,0,Time[0]+Period()*360,objsl,Time[0]+Period()*480,objsl); ObjectSet("clsel",10,0); ObjectSet("clsel",6,Magenta); ObjectSet("clsel",8,3);} else{ObjectSet("clsel",1,objsl); ObjectSet("clsel",3,objsl); ObjectSet("clsel",0,Time[0]+Period()*360); ObjectSet("clsel",2,Time[0]+Period()*480);}} //=========================// if(i>=1||objtot!=ObjectsTotal()||mxx!=buy_prs||mnn!=sel_prs)obj=true; mxx=buy_prs; mnn=sel_prs; max_ind=mxx-can*Point; min_ind=mnn+can*Point; max_ind2=max_ind-((cann[0]-(kn-risk)*chag)*Point); min_ind2=min_ind+((cann[0]-(kn-risk)*chag)*Point); //======================// разные фуфелки //=======================// if(obj==true){string ln; int tm, tm2, col, shn; double kln; //==========// for(y=0;y<=21;y++){ln="kr_"+DoubleToStr(y,0); if(y<=9){kln=max_ind+y*chag*Point; tm=120; tm2=240;} if(y>9&&y<20){kln=mnn+(y-10)*chag*Point; tm=360; tm2=480;} if(y==20){kln=max_ind2; tm=120; tm2=240; col=Teal;} if(y==21){kln=min_ind2; tm=360; tm2=480; col=FireBrick;} if(y==9-risk || y==10+risk) {col=Lime; shn=3;} else {col=DarkGoldenrod; shn=0;} if(ObjectFind(ln)==-1) //-1 нет линии, 0(else) - есть линия. {ObjectCreate(ln,2,0,Time[0]+Period()*tm,kln,Time[0]+Period()*tm2,kln); ObjectSet(ln,10,0);ObjectSet(ln,6,col); ObjectSet(ln,8,shn);} else{ObjectSet(ln,1,kln);ObjectSet(ln,3,kln);ObjectSet(ln,6,col); ObjectSet(ln,8,shn); ObjectSet(ln,0,Time[0]+Period()*tm);ObjectSet(ln,2,Time[0]+Period()*tm2);}} //конец циклов //==========// if(ObjectFind("max")==-1) {ObjectCreate("max",2,0,Time[0]+Period()*240,mxx,Time[0]+Period()*240,max_ind); ObjectSet("max",10,0);ObjectSet("max",6,DeepSkyBlue); ObjectSet("max",8,2);} else{ObjectSet("max",1,mxx); ObjectSet("max",0,Time[0]+Period()*240); ObjectSet("max",3,max_ind); ObjectSet("max",2,Time[0]+Period()*240);} //==========// if(ObjectFind("min")==-1) {ObjectCreate("min",2,0,Time[0]+Period()*480,mnn,Time[0]+Period()*480,min_ind); ObjectSet("min",10,0);ObjectSet("min",6,Red); ObjectSet("min",8,2);} else{ObjectSet("min",1,mnn);ObjectSet("min",0,Time[0]+Period()*480); ObjectSet("min",3,min_ind);ObjectSet("min",2,Time[0]+Period()*480);} //==========// max+ //==========// if(ObjectFind("max+")==-1) {ObjectCreate("max+",2,0,Time[0]+Period()*240,max_ind,Time[0]+Period()*240,max_ind2); ObjectSet("max+",10,0);ObjectSet("max+",6,Teal);} else{ObjectSet("max+",1,max_ind); ObjectSet("max+",0,Time[0]+Period()*240); ObjectSet("max+",3,max_ind2);ObjectSet("max+",2,Time[0]+Period()*240);} //==========// min+ //==========// if(ObjectFind("min+")==-1) {ObjectCreate("min+",2,0,Time[0]+Period()*480,min_ind,Time[0]+Period()*480,min_ind2); ObjectSet("min+",10,0);ObjectSet("min+",6,FireBrick);} else{ObjectSet("min+",1,min_ind); ObjectSet("min+",0,Time[0]+Period()*480); ObjectSet("min+",3,min_ind2);ObjectSet("min+",2,Time[0]+Period()*480);}}} //==========// objtot=ObjectsTotal(); return (0);} //==========// int fn(int err){switch(err) {case 1: Alert(Symbol()," повторившийся параметр без ошибки"); break; case 3: Alert(Symbol()," неправильные параметры"); break; case 6: Alert(Symbol()," нет связи с сервером"); break; case 128: Alert(Symbol()," истёк срок ожидания"); break; case 129: Alert(Symbol()," неправильная цена"); break; case 130: Alert(Symbol()," неправельные стопы"); break; case 131: Alert(Symbol()," неправильный объём"); break; case 132: Alert(Symbol()," рынок закрыт"); break; case 133: Alert(Symbol()," торговля запрещена"); break; case 134: Alert(Symbol()," недостаточно средств"); break; case 135: Alert(Symbol()," цена изменилась"); break; case 138: Alert(Symbol()," новые цены"); break; case 145: Alert(Symbol()," ордер слишком близко к рынку"); break; case 146: Alert(Symbol()," подсистема торговли занята"); break; case 4051: Alert(Symbol()," недопустимое значение,возможно объём.");break; case 4107: Alert(Symbol()," неправильный параметр цены для торговой функции");break; case 4108: Alert(Symbol()," неправильный параметр тикета");break; default: Alert(Symbol()," ошибка № ",err);}} //===================================================//