Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategy
Miscellaneous
It plays sound alertsIt issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
martin-log
//íííííííííííííííííííííííííííí//
//       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(ad<lot_max){ad=ad*2; kh++;} // kh êîë-âî îðäåðîâ

for(int z=1;z<=kn;z++){cann[z]=NormalizeDouble(chag*MathPow(lg,z-1),0); if(z<=kh-1)cann[0]=cann[0]+cann[z];
for(int v=1;v<=z;v++){can_2[v]=can_2[v]+cann[z]; if(v==z){for(int x=1;x<=z;x++)
   {pric[z]=pric[z]+can_2[x]*MathPow(2,x-1);}pun[z]=NormalizeDouble(pric[z]/(2*MathPow(2,z)-1),0);
   prof[z+1]=((pun[z]+prf_plus)*(2*MathPow(2,z)-1)-pric[z])*Lots*10;}}}prof[1]=prf_plus*Lots*10;

  if(!IsTesting()){buy_prs=GlobalVariableGet("lg_buy_prs"); buy_ind=GlobalVariableGet("lg_buy_ind");
                   sel_prs=GlobalVariableGet("lg_sel_prs"); sel_ind=GlobalVariableGet("lg_sel_ind");}
//íííííííííííííííííííííííííííí//
if(Digits==2) k=1.0;
if(Digits==3) k=10.0;
if(Digits==4) k=1.0;
if(Digits==5) k=10.0;

minStop=MarketInfo(Symbol(),MODE_STOPLEVEL);

c=0;
chag=chag*k; 
stp=chag*200; can=chag*kn;
//can=cann[0];
//íííííííííííííííííííííííííííí//
   return (0);
}
//íííííííííííííííííííííííííííí
int start() {
   string asd,sret,bch,bpf,bs;
   int kk,err,tick_b,tick_s,tikt_b,tikt_s,tick_slm,y_buy,y_sel,dist_s,dist_b,
       tick_blm,i,y,Imax,Imin,Imax_1,Imin_1,Imax_2,Imin_2,Itm,ghb,ghs;   
   double st,pf,lot,prib,price_b,tkprof_b,lots_b,price_s,tkprof_s,chag_sel,chag_buy,gbv,ubt,abc,
       lots_s,stp_b,stp_s,prc,max_1,min_1,max_2,min_2,dt,dt2,mnn,mxx,prs_s,prs_b,prf_bu,prf_sl;
   bool obj=false, op_sl=false, op_by=false, obj_a=false;
//=================//
   if(Bars-c>1) c=0; // ïîêà íå äîãðóçèòüñÿ èñòîðèÿ
   i=Bars-c; c=Bars;
//============// äîáàâèòü íåìíîãî ñîëè //=================//
    for (y=0;y<OrdersTotal();y++){OrderSelect(y,0);
      if(Symbol()!=OrderSymbol()||OrderMagicNumber()!=magic) continue;      
      if (OrderType() == 0 || OrderType() == 1) abc=abc + OrderProfit() + OrderSwap() + OrderCommission();

      if (OrderType()==OP_BUY) y_buy++;
      if (OrderType()==OP_SELL) y_sel++;

      if (OrderType()==OP_BUY && tick_b<OrderTicket()) {
       tick_b=OrderTicket();
       price_b=OrderOpenPrice();
   if(lots_b==OrderLots())ghb=1;
       lots_b=OrderLots();
       tkprof_b=OrderTakeProfit();}
      
      if (OrderType()==OP_SELL && tick_s<OrderTicket()) {
       tick_s=OrderTicket();
       price_s=OrderOpenPrice();
   if(lots_s==OrderLots())ghs=1; 
       lots_s=OrderLots();
       tkprof_s=OrderTakeProfit();}     
 
  //=================  äëÿ ñòîïà
      if(OrderType()==OP_BUY&&(tikt_b>OrderTicket()||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<buy_prs && Ask<buy_ind) || buy_ind==0) buy_ind=Ask;
   or_bu=MathFloor((buy_prs-buy_ind)/Point/chag);
   if((Bid-buy_ind)/Point>=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((Bid<sel_prs||sel_prs==0) && or_sl<=0) {sel_prs=Bid; sel_ind=Bid;}
   if(Bid>sel_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<lot_max){ 
      prc=price_b-chag_buy*Point; pf=prc+(prf_plus+NormalizeDouble(pun[y_buy],0))*Point; lot=lots_b*k_lot; if(lots_b==0.01)lot=0.02;
      if((Bid-prc)/Point>=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<lot_max){      
      prc=price_s+chag_sel*Point; pf=prc-(prf_plus+NormalizeDouble(pun[y_sel],0))*Point; lot=lots_s*k_lot; if(lots_s==0.01)lot=0.02;
      if((prc-Ask)/Point>=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;y<OrdersTotal();y++){OrderSelect(y,0);if(Symbol()!=OrderSymbol()||OrderMagicNumber()!=magic) continue;
      st=NormalizeDouble(OrderStopLoss(),Digits); pf=NormalizeDouble(OrderTakeProfit(),Digits);
      stp_b=NormalizeDouble(stp_b,Digits); tkprof_b=NormalizeDouble(tkprof_b,Digits);
      stp_s=NormalizeDouble(stp_s,Digits); tkprof_s=NormalizeDouble(tkprof_s,Digits);

      if(OrderType()==OP_BUY&&tick_b!=0&& (stp_b!=st||tkprof_b!=pf)) {
         OrderModify(OrderTicket(), OrderOpenPrice(), stp_b, tkprof_b,0); 
         err=GetLastError(); if(err!=0){fn(err);PlaySound("alert2.wav");  Alert("buy modify");}}
//==================// ìîäèô îòêðûòûõ sell îðäåðîâ //===========================//  
      if(OrderType()==OP_SELL&&tick_s!=0 && (stp_s!=st||tkprof_s!=pf)) {
         OrderModify(OrderTicket(), OrderOpenPrice(), stp_s, tkprof_s,0); 
         err=GetLastError(); if(err!=0){fn(err);PlaySound("alert2.wav");  Alert("sell modify");}}}
//=============================================//
if(!test){Comment("  gubaha martin.    ",TimeToStr(TimeLocal(),4),
      "\n", "  Òåêóùèé ïðèáûëü= ",NormalizeDouble(abc,2)," $ ", 
      "\n", "  Òåêóùèé áàëàíñ       = ", AccountBalance(), " $ ");
//===============// ïàëî÷êè òî÷å÷êè ñòðåëî÷êè //==========//
   if(or_bu==0 && ObjectFind("clsbuy")==0) ObjectDelete("clsbuy");  //-1 íåò îáúåêòà , 0(else) - åñòü îáúåêò. 
   if(or_bu>0 && (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);}}
//===================================================//

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---