Советники: martin для малых депозитов. - страница 2

 
Sergey001:

Тогда дайте пошаговую инструкцию, куда класть, какие галочки ставить...

А то в правом верхнем углу надпись "мартин" и крестик...

меню - сервис/настройки/советники. Поставь галочки - "включить советники" и " разрешить советнику торговать". Вместо крестика появиться наглая улыбающаяся рожа..
 
чтоб советник начал работать надо вообще не выключать комп. а иначе он начинает работу заново, еслиб можно было указывать ему минимумы и максимумы,сделка бы открылась быстрее. а так при определенных настройках очень хорошо зарабатывает в тестере.
 

С дефолтными настройками (за исключением риск поставил 2) торгует на евро демо-счете чуть больше месяца.

Начальный депо 30к, прибыль 24к.

Правда, я внес в него немного изменений, чтобы начальный лот брался не фиксированный из настроек, а высчитывался как процент от размера депо.

Поставил 1 процент - пока полет нормальный.

Последние десять дней с теми же настройками торгует на реале (депо 1.7к). Прибыль $200.

График выкладывать смысла нет, так как я на этот счет за период вводил-выводил средства и линия там весьма ломаная.

Продолжаю тестировать. Автор молодец.

 
а что значит ошибка 4111?
 
aries8585:
а что значит ошибка 4111?

4111 - короткие позиции не разрешены..
 
c_tiger:

С дефолтными настройками (за исключением риск поставил 2) торгует на евро демо-счете чуть больше месяца.

Начальный депо 30к, прибыль 24к.

Правда, я внес в него немного изменений, чтобы начальный лот брался не фиксированный из настроек, а высчитывался как процент от размера депо.

Поставил 1 процент - пока полет нормальный.

Последние десять дней с теми же настройками торгует на реале (депо 1.7к). Прибыль $200.

График выкладывать смысла нет, так как я на этот счет за период вводил-выводил средства и линия там весьма ломаная.

Продолжаю тестировать. Автор молодец.



слушай мил человек в программировании вообще ничего не волоку поделись пожалуйста своей версией с изменениями указанными в этом предложении.

Правда, я внес в него немного изменений, чтобы начальный лот брался не фиксированный из настроек, а высчитывался как процент от размера депо.

Поставил 1 процент - пока полет нормальный.

 
navigatorus:
c_tiger:

С дефолтными настройками (за исключением риск поставил 2) торгует на евро демо-счете чуть больше месяца.

Начальный депо 30к, прибыль 24к.

Правда, я внес в него немного изменений, чтобы начальный лот брался не фиксированный из настроек, а высчитывался как процент от размера депо.

Поставил 1 процент - пока полет нормальный.

Последние десять дней с теми же настройками торгует на реале (депо 1.7к). Прибыль $200.

График выкладывать смысла нет, так как я на этот счет за период вводил-выводил средства и линия там весьма ломаная.

Продолжаю тестировать. Автор молодец.



слушай мил человек в программировании вообще ничего не волоку поделись пожалуйста своей версией с изменениями указанными в этом предложении.

Правда, я внес в него немного изменений, чтобы начальный лот брался не фиксированный из настроек, а высчитывался как процент от размера депо.

Поставил 1 процент - пока полет нормальный.

Держи.

https://www.dropbox.com/s/jvzqpp0srs0ne6o/crazymartin.mq4

Отчет по двум месяцам работы в онлайне данного советника.

На деме с 12 декабря - с 30к начальных дошло до 94к.

Gross Profit: 79 344.20 Gross Loss: 15 370.02 Total Net Profit: 63 974.18
Profit Factor: 5.16 Expected Payoff: 1084.31
Absolute Drawdown: 0.00 Maximal Drawdown: 4 540.51 (8.33%) Relative Drawdown: 11.05% (3 909.36)
Total Trades: 59 Short Positions (won %): 33 (63.64%) Long Positions (won %): 26 (65.38%)
Profit Trades (% of total): 38 (64.41%) Loss trades (% of total): 21 (35.59%)
Largest profit trade: 11 355.83 loss trade: -1 794.91
Average profit trade: 2 088.01 loss trade: -731.91
Maximum consecutive wins ($): 8 (3 740.49) consecutive losses ($): 5 (-3 909.36)
Maximal consecutive profit (count): 15 794.50 (6) consecutive loss (count): -4 540.51 (3)
Average consecutive wins: 3 consecutive losses: 2


На реале с 10 января - с 1.7к заработано 1.2к (снял 1.5к, так что сейчас там поменьше, чем вначале).

Gross Profit: 1 639.93 Gross Loss: 426.28 Total Net Profit: 1 213.65
Profit Factor: 3.85 Expected Payoff: 22.90
Absolute Drawdown: 0.00 Maximal Drawdown: 134.34 (5.72%) Relative Drawdown: 5.72% (134.34)
Total Trades: 53 Short Positions (won %): 38 (68.42%) Long Positions (won %): 15 (66.67%)
Profit Trades (% of total): 36 (67.92%) Loss trades (% of total): 17 (32.08%)
Largest profit trade: 274.99 loss trade: -64.39
Average profit trade: 45.55 loss trade: -25.08
Maximum consecutive wins ($): 13 (206.79) consecutive losses ($): 3 (-134.34)
Maximal consecutive profit (count): 365.69 (3) consecutive loss (count): -134.34 (3)
Average consecutive wins: 4 consecutive losses: 2

Сегодня еще скину скрины с отчетов МТ,

 
Интересный советник,автору спасибо! Есть вопрос,если поставить на разные пары,ордера путаться не будут? Или просьба такая,магик приделайте пожалуйста к советнику.
 
Alex7730:
Интересный советник,автору спасибо! Есть вопрос,если поставить на разные пары,ордера путаться не будут? Или просьба такая,магик приделайте пожалуйста к советнику.

Ордера путаться не будут. Магик есть в коде. можно поменять на другой. Чуть переделал.

//нннннннннннннннннннннннннннн//
//                        //
//нннннннннннннннннннннннннннн//
extern bool test=false;  // откл объектов при тесте
extern int prof=56;     // уровень профита
extern int chag=36;     // шаг между ордерами
extern int risk=4;         //уровень риска
extern double lot = 0.01; // начальный лот
extern double k_lot=1.7; // увеличение объема
extern double lot_max=100; // максимальный лот
extern int magic = 37641; 
//=====================================================//
int kn=9;  // величина вертикальной шкалы
 
int k,c,b_ind,s_ind,objtot,er;
double buy_prs,sel_prs,buy_ind,sel_ind,or_bu,or_sl,prf_b,prf_s,b_pr,s_pr,b2_cls,s2_cls;
string nh;
//нннннннннннннннннннннннннннн//
int init()
  {
//----
 
if(Digits==2) k=1;
if(Digits==3) k=10;
if(Digits==4) k=1;
if(Digits==5) k=10;
nh=StringSubstr(Symbol(),2,2);
 
 if(!IsTesting()){
    buy_prs=GlobalVariableGet(nh+"_buy_prs"); buy_ind=GlobalVariableGet(nh+"_buy_ind");
    sel_prs=GlobalVariableGet(nh+"_sel_prs"); sel_ind=GlobalVariableGet(nh+"_sel_ind");}
 
c=0;
chag=chag*k;
prof=prof*k;
//нннннннннннннннннннннннннннн//
   return(0);
  }
//============================================//
int start()
  {
//----
int i,y,tick_s,tick_b,tick_slm,tick_blm;
double prov,price_b,price_s,prof_b,prof_s,lot_b,lot_s,b_cls,s_cls,abc;
bool mod_b=false,mod_s=false;
 
//=================//
   if(Bars-c>1) c=0;
   i=Bars-c; c=Bars;
//==================================//   
 if(!IsTesting()){for(y=0;y<OrdersTotal();y++)if(OrderSelect(y,0,0))
   if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && (OrderType()==0 || OrderType()==1)){
      prov=prov+OrderProfit()+OrderSwap()+OrderCommission();}
   if(prov<0&&prov<GlobalVariableGet(nh+"_max_prov"))GlobalVariableSet(nh+"_max_prov",prov);}
 
//=================================================//
    for (y=0;y<OrdersTotal();y++)if(OrderSelect(y,0))
      if(Symbol()==OrderSymbol() && OrderMagicNumber()==magic){
      if (OrderType() == 0 || OrderType() == 1) abc=abc + OrderProfit() + OrderSwap() + OrderCommission();
     
      if(OrderType()==0){if(prf_b!=OrderTakeProfit() && prf_b!=0) mod_b=true; prf_b=OrderTakeProfit();}
      if(OrderType()==OP_BUY && tick_b<OrderTicket()) {
       tick_b=OrderTicket();
       price_b=OrderOpenPrice();
       lot_b=OrderLots();
       prof_b=OrderTakeProfit();}
 
      if(OrderType()==1){if(prf_s!=OrderTakeProfit() && prf_s!=0) mod_s=true; prf_s=OrderTakeProfit();}      
      if(OrderType()==OP_SELL && tick_s<OrderTicket()) {
       tick_s=OrderTicket();
       price_s=OrderOpenPrice();
       lot_s=OrderLots();
       prof_s=OrderTakeProfit();} 
 
      if (OrderType()==OP_BUYLIMIT)  tick_blm = OrderTicket();
      if (OrderType()==OP_SELLLIMIT) tick_slm = OrderTicket();}
//=====================================================//
   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;
   b_cls=buy_ind+MathFloor(prof+chag/2)*Point;
   or_bu=MathFloor((buy_prs-buy_ind)/Point/chag); 
   if(Bid>=b_cls && 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;
   s_cls=sel_ind-MathFloor(prof+chag/2)*Point;
   or_sl=MathFloor((sel_ind-sel_prs)/Point/chag);
   if(Ask<=s_cls && 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(nh+"_buy_prs",buy_prs); GlobalVariableSet(nh+"_buy_ind",buy_ind);
   GlobalVariableSet(nh+"_sel_prs",sel_prs); GlobalVariableSet(nh+"_sel_ind",sel_ind);} 
//===============================
   if(tick_b==0 && tick_blm!=0) if(!OrderDelete(tick_blm)){er=GetLastError(); if(er>0) err(er);}
   if(tick_s==0 && tick_slm!=0) if(!OrderDelete(tick_slm)){er=GetLastError(); if(er>0) err(er);}
 
   if(or_bu==risk && tick_b==0) open(0); 
   if(or_sl==risk && tick_s==0) open(1);
 
   if(tick_b>0 && tick_blm==0 && lot_b*k_lot<lot_max && Ask>price_b-chag*Point) open_lim(2,price_b,lot_b);
   if(tick_s>0 && tick_slm==0 && lot_s*k_lot<lot_max && Bid<price_s+chag*Point) open_lim(3,price_s,lot_s);
 
   if(mod_b) modif(0,prof_b);
   if(mod_s) modif(1,prof_s);
//===============================
  b_ind=tick_b;   s_ind=tick_s; 
//=================================================//
 if(!test){if(b_pr!=buy_prs || s_pr!=sel_prs || i>=1 || objtot!=ObjectsTotal())
         object(buy_prs,buy_prs-chag*kn*Point, sel_prs,sel_prs+chag*kn*Point);
//======= 
 if(b_cls>buy_prs && ObjectFind("clsbuy")==0) ObjectDelete("clsbuy"); 
 if(s_cls<sel_prs && ObjectFind("clsel")==0)  ObjectDelete("clsel");
 
 if(b_cls<buy_prs && (b2_cls!=b_cls || i>=1 || objtot!=ObjectsTotal())) cls(0,b_cls);
 if(s_cls>sel_prs && (s2_cls!=s_cls || i>=1 || objtot!=ObjectsTotal())) cls(1,s_cls);
 
   b2_cls=b_cls; s2_cls=s_cls;
   b_pr=buy_prs; s_pr=sel_prs;
   objtot=ObjectsTotal(); com(abc);}
//======================================================//
   return(0);
  }
//нннннннннннннннннннннннннннн//
//==================================//
int open(int tip){int tk;
   if(tip==0){tk=OrderSend(Symbol(),OP_BUY,lot,Ask,3,0,0,"martin",magic); er=GetLastError(); if(er>0) err(er);
   if(tk>0){if(OrderSelect(tk,SELECT_BY_TICKET)) if(!OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderOpenPrice()+prof*Point,0))
       {er=GetLastError(); if(er>0) err(er);}}}
             
   if(tip==1){tk=OrderSend(Symbol(),OP_SELL,lot,Bid,3,0,0,"martin",magic); er=GetLastError(); if(er>0) err(er);    
   if(tk>0){if(OrderSelect(tk,SELECT_BY_TICKET)) if(!OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderOpenPrice()-prof*Point,0))
       {er=GetLastError(); if(er>0) err(er);}}}return(0);}
//==================================//
int open_lim(int tip,double prc,double lota){double lott=NormalizeDouble(lota*k_lot,2); if(lota==0.01 && k_lot>1.3)lott=0.02;
   if(tip==2){if(!OrderSend(Symbol(),OP_BUYLIMIT,lott,prc-chag*Point,3,0,prc-(chag-prof)*Point,"martin",magic,0))
               {er=GetLastError(); if(er>0) err(er);}}
   if(tip==3){if(!OrderSend(Symbol(),OP_SELLLIMIT,lott,prc+chag*Point,3,0,prc+(chag-prof)*Point,"martin",magic,0))
               {er=GetLastError(); if(er>0) err(er);}}return(0);}
//==================================//
bool modif(int tp,double pf){int y;
   if(tp==0){for(y=0;y<OrdersTotal();y++)if(OrderSelect(y,0))
      if(Symbol()==OrderSymbol() && OrderMagicNumber()==magic && OrderType()==0){
       if(!OrderModify(OrderTicket(),OrderOpenPrice(),0,pf,0)) {er=GetLastError(); if(er>0) err(er);}}}
//=======   
   if(tp==1){ for(y=0;y<OrdersTotal();y++)if(OrderSelect(y,0))
      if(Symbol()==OrderSymbol() && OrderMagicNumber()==magic && OrderType()==1){  
       if(!OrderModify(OrderTicket(),OrderOpenPrice(),0,pf,0)) {er=GetLastError(); if(er>0) err(er);}}}return(0);}      
//======================================//
bool com(double abc){Comment("  gubaha martin.    ",TimeToStr(TimeLocal(),4),
      "\n", "  максим. просадка   =  ",GlobalVariableGet(nh+"_max_prov")," $",
      "\n", "  Текущий прибыль= ",NormalizeDouble(abc,2)," $ ", 
      "\n", "  Текущий баланс       = ", AccountBalance(), " $ ");return(0);}
//==================================//
bool object(double up_b,double dw_b,double up_s,double dw_s){
   if(ObjectFind("lin_b")==-1)
      {ObjectCreate("lin_b",2,0,Time[0]+Period()*240,up_b,Time[0]+Period()*240,dw_b);
       ObjectSet("lin_b",10,0);ObjectSet("lin_b",6,DeepSkyBlue);
       ObjectSet("lin_b",8,2);}   
   else{ObjectSet("lin_b",1,up_b); ObjectSet("lin_b",0,Time[0]+Period()*240);
        ObjectSet("lin_b",3,dw_b); ObjectSet("lin_b",2,Time[0]+Period()*240);}      
//-------------
   if(ObjectFind("lin_s")==-1)
      {ObjectCreate("lin_s",2,0,Time[0]+Period()*480,up_s,Time[0]+Period()*480,dw_s);
       ObjectSet("lin_s",10,0);ObjectSet("lin_s",6,Red);
       ObjectSet("lin_s",8,2);}   
   else{ObjectSet("lin_s",1,up_s);ObjectSet("lin_s",0,Time[0]+Period()*480);
        ObjectSet("lin_s",3,dw_s);ObjectSet("lin_s",2,Time[0]+Period()*480);}
//-------------
 string ln; int y,tm,tm2,col,shn; double kln;
 
   for(y=0;y<=kn*2+1;y++){ln="kr_"+DoubleToStr(y,0);    
      if(y<=kn){kln=up_b-y*chag*Point; tm=120; tm2=240;}
      if(y>kn && y<=kn*2+1){kln=up_s+(y-kn-1)*chag*Point; tm=360; tm2=480;}
      if(y==risk || y==kn+1+risk) {col=Lime; shn=3;} else {col=DarkGoldenrod; shn=0;}
 
   if(ObjectFind(ln)==-1)   
       {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);}}return(0);}
//==============//
 bool cls(int tp,double clos){
   if(tp==0){if(ObjectFind("clsbuy")==-1) 
       {ObjectCreate("clsbuy",2,0,Time[0]+Period()*120,clos,Time[0]+Period()*240,clos);
        ObjectSet("clsbuy",10,0);ObjectSet("clsbuy",6,Magenta); ObjectSet("clsbuy",8,3);}
   else{ObjectSet("clsbuy",1,clos); ObjectSet("clsbuy",3,clos);   
        ObjectSet("clsbuy",0,Time[0]+Period()*120); ObjectSet("clsbuy",2,Time[0]+Period()*240);}}
 
   if(tp==1){if(ObjectFind("clsel")==-1)      
       {ObjectCreate("clsel",2,0,Time[0]+Period()*360,clos,Time[0]+Period()*480,clos);
        ObjectSet("clsel",10,0); ObjectSet("clsel",6,Magenta); ObjectSet("clsel",8,3);}
   else{ObjectSet("clsel",1,clos); ObjectSet("clsel",3,clos);   
        ObjectSet("clsel",0,Time[0]+Period()*360); ObjectSet("clsel",2,Time[0]+Period()*480);}}
       return(0);}
//===================================================//
 int err(int er_){switch(er_)
   {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()," ошибка № ",er_);}return(0);}
//======================================================//



 
cobrra:
Alex7730:
Интересный советник,автору спасибо! Есть вопрос,если поставить на разные пары,ордера путаться не будут? Или просьба такая,магик приделайте пожалуйста к советнику.

Ордера путаться не будут. Магик есть в коде. можно поменять на другой. Чуть переделал.

//нннннннннннннннннннннннннннн//
//                        //
//нннннннннннннннннннннннннннн//
extern bool test=false;  // откл объектов при тесте
extern int prof=56;     // уровень профита
extern int chag=36;     // шаг между ордерами
extern int risk=4;         //уровень риска
extern double lot = 0.01; // начальный лот
extern double k_lot=1.7; // увеличение объема
extern double lot_max=100; // максимальный лот
extern int magic = 37641; 
//=====================================================//
int kn=9;  // величина вертикальной шкалы
 
int k,c,b_ind,s_ind,objtot,er;
double buy_prs,sel_prs,buy_ind,sel_ind,or_bu,or_sl,prf_b,prf_s,b_pr,s_pr,b2_cls,s2_cls;
string nh;
//нннннннннннннннннннннннннннн//
int init()
  {
//----
 
if(Digits==2) k=1;
if(Digits==3) k=10;
if(Digits==4) k=1;
if(Digits==5) k=10;
nh=StringSubstr(Symbol(),2,2);
 
 if(!IsTesting()){
    buy_prs=GlobalVariableGet(nh+"_buy_prs"); buy_ind=GlobalVariableGet(nh+"_buy_ind");
    sel_prs=GlobalVariableGet(nh+"_sel_prs"); sel_ind=GlobalVariableGet(nh+"_sel_ind");}
 
c=0;
chag=chag*k;
prof=prof*k;
//нннннннннннннннннннннннннннн//
   return(0);
  }
//============================================//
int start()
  {
//----
int i,y,tick_s,tick_b,tick_slm,tick_blm;
double prov,price_b,price_s,prof_b,prof_s,lot_b,lot_s,b_cls,s_cls,abc;
bool mod_b=false,mod_s=false;
 
//=================//
   if(Bars-c>1) c=0;
   i=Bars-c; c=Bars;
//==================================//   
 if(!IsTesting()){for(y=0;y<OrdersTotal();y++)if(OrderSelect(y,0,0))
   if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && (OrderType()==0 || OrderType()==1)){
      prov=prov+OrderProfit()+OrderSwap()+OrderCommission();}
   if(prov<0&&prov<GlobalVariableGet(nh+"_max_prov"))GlobalVariableSet(nh+"_max_prov",prov);}
 
//=================================================//
    for (y=0;y<OrdersTotal();y++)if(OrderSelect(y,0))
      if(Symbol()==OrderSymbol() && OrderMagicNumber()==magic){
      if (OrderType() == 0 || OrderType() == 1) abc=abc + OrderProfit() + OrderSwap() + OrderCommission();
     
      if(OrderType()==0){if(prf_b!=OrderTakeProfit() && prf_b!=0) mod_b=true; prf_b=OrderTakeProfit();}
      if(OrderType()==OP_BUY && tick_b<OrderTicket()) {
       tick_b=OrderTicket();
       price_b=OrderOpenPrice();
       lot_b=OrderLots();
       prof_b=OrderTakeProfit();}
 
      if(OrderType()==1){if(prf_s!=OrderTakeProfit() && prf_s!=0) mod_s=true; prf_s=OrderTakeProfit();}      
      if(OrderType()==OP_SELL && tick_s<OrderTicket()) {
       tick_s=OrderTicket();
       price_s=OrderOpenPrice();
       lot_s=OrderLots();
       prof_s=OrderTakeProfit();} 
 
      if (OrderType()==OP_BUYLIMIT)  tick_blm = OrderTicket();
      if (OrderType()==OP_SELLLIMIT) tick_slm = OrderTicket();}
//=====================================================//
   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;
   b_cls=buy_ind+MathFloor(prof+chag/2)*Point;
   or_bu=MathFloor((buy_prs-buy_ind)/Point/chag); 
   if(Bid>=b_cls && 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;
   s_cls=sel_ind-MathFloor(prof+chag/2)*Point;
   or_sl=MathFloor((sel_ind-sel_prs)/Point/chag);
   if(Ask<=s_cls && 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(nh+"_buy_prs",buy_prs); GlobalVariableSet(nh+"_buy_ind",buy_ind);
   GlobalVariableSet(nh+"_sel_prs",sel_prs); GlobalVariableSet(nh+"_sel_ind",sel_ind);} 
//===============================
   if(tick_b==0 && tick_blm!=0) if(!OrderDelete(tick_blm)){er=GetLastError(); if(er>0) err(er);}
   if(tick_s==0 && tick_slm!=0) if(!OrderDelete(tick_slm)){er=GetLastError(); if(er>0) err(er);}
 
   if(or_bu==risk && tick_b==0) open(0); 
   if(or_sl==risk && tick_s==0) open(1);
 
   if(tick_b>0 && tick_blm==0 && lot_b*k_lot<lot_max && Ask>price_b-chag*Point) open_lim(2,price_b,lot_b);
   if(tick_s>0 && tick_slm==0 && lot_s*k_lot<lot_max && Bid<price_s+chag*Point) open_lim(3,price_s,lot_s);
 
   if(mod_b) modif(0,prof_b);
   if(mod_s) modif(1,prof_s);
//===============================
  b_ind=tick_b;   s_ind=tick_s; 
//=================================================//
 if(!test){if(b_pr!=buy_prs || s_pr!=sel_prs || i>=1 || objtot!=ObjectsTotal())
         object(buy_prs,buy_prs-chag*kn*Point, sel_prs,sel_prs+chag*kn*Point);
//======= 
 if(b_cls>buy_prs && ObjectFind("clsbuy")==0) ObjectDelete("clsbuy"); 
 if(s_cls<sel_prs && ObjectFind("clsel")==0)  ObjectDelete("clsel");
 
 if(b_cls<buy_prs && (b2_cls!=b_cls || i>=1 || objtot!=ObjectsTotal())) cls(0,b_cls);
 if(s_cls>sel_prs && (s2_cls!=s_cls || i>=1 || objtot!=ObjectsTotal())) cls(1,s_cls);
 
   b2_cls=b_cls; s2_cls=s_cls;
   b_pr=buy_prs; s_pr=sel_prs;
   objtot=ObjectsTotal(); com(abc);}
//======================================================//
   return(0);
  }
//нннннннннннннннннннннннннннн//
//==================================//
int open(int tip){int tk;
   if(tip==0){tk=OrderSend(Symbol(),OP_BUY,lot,Ask,3,0,0,"martin",magic); er=GetLastError(); if(er>0) err(er);
   if(tk>0){if(OrderSelect(tk,SELECT_BY_TICKET)) if(!OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderOpenPrice()+prof*Point,0))
       {er=GetLastError(); if(er>0) err(er);}}}
             
   if(tip==1){tk=OrderSend(Symbol(),OP_SELL,lot,Bid,3,0,0,"martin",magic); er=GetLastError(); if(er>0) err(er);    
   if(tk>0){if(OrderSelect(tk,SELECT_BY_TICKET)) if(!OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderOpenPrice()-prof*Point,0))
       {er=GetLastError(); if(er>0) err(er);}}}return(0);}
//==================================//
int open_lim(int tip,double prc,double lota){double lott=NormalizeDouble(lota*k_lot,2); if(lota==0.01 && k_lot>1.3)lott=0.02;
   if(tip==2){if(!OrderSend(Symbol(),OP_BUYLIMIT,lott,prc-chag*Point,3,0,prc-(chag-prof)*Point,"martin",magic,0))
               {er=GetLastError(); if(er>0) err(er);}}
   if(tip==3){if(!OrderSend(Symbol(),OP_SELLLIMIT,lott,prc+chag*Point,3,0,prc+(chag-prof)*Point,"martin",magic,0))
               {er=GetLastError(); if(er>0) err(er);}}return(0);}
//==================================//
bool modif(int tp,double pf){int y;
   if(tp==0){for(y=0;y<OrdersTotal();y++)if(OrderSelect(y,0))
      if(Symbol()==OrderSymbol() && OrderMagicNumber()==magic && OrderType()==0){
       if(!OrderModify(OrderTicket(),OrderOpenPrice(),0,pf,0)) {er=GetLastError(); if(er>0) err(er);}}}
//=======   
   if(tp==1){ for(y=0;y<OrdersTotal();y++)if(OrderSelect(y,0))
      if(Symbol()==OrderSymbol() && OrderMagicNumber()==magic && OrderType()==1){  
       if(!OrderModify(OrderTicket(),OrderOpenPrice(),0,pf,0)) {er=GetLastError(); if(er>0) err(er);}}}return(0);}      
//======================================//
bool com(double abc){Comment("  gubaha martin.    ",TimeToStr(TimeLocal(),4),
      "\n", "  максим. просадка   =  ",GlobalVariableGet(nh+"_max_prov")," $",
      "\n", "  Текущий прибыль= ",NormalizeDouble(abc,2)," $ ", 
      "\n", "  Текущий баланс       = ", AccountBalance(), " $ ");return(0);}
//==================================//
bool object(double up_b,double dw_b,double up_s,double dw_s){
   if(ObjectFind("lin_b")==-1)
      {ObjectCreate("lin_b",2,0,Time[0]+Period()*240,up_b,Time[0]+Period()*240,dw_b);
       ObjectSet("lin_b",10,0);ObjectSet("lin_b",6,DeepSkyBlue);
       ObjectSet("lin_b",8,2);}   
   else{ObjectSet("lin_b",1,up_b); ObjectSet("lin_b",0,Time[0]+Period()*240);
        ObjectSet("lin_b",3,dw_b); ObjectSet("lin_b",2,Time[0]+Period()*240);}      
//-------------
   if(ObjectFind("lin_s")==-1)
      {ObjectCreate("lin_s",2,0,Time[0]+Period()*480,up_s,Time[0]+Period()*480,dw_s);
       ObjectSet("lin_s",10,0);ObjectSet("lin_s",6,Red);
       ObjectSet("lin_s",8,2);}   
   else{ObjectSet("lin_s",1,up_s);ObjectSet("lin_s",0,Time[0]+Period()*480);
        ObjectSet("lin_s",3,dw_s);ObjectSet("lin_s",2,Time[0]+Period()*480);}
//-------------
 string ln; int y,tm,tm2,col,shn; double kln;
 
   for(y=0;y<=kn*2+1;y++){ln="kr_"+DoubleToStr(y,0);    
      if(y<=kn){kln=up_b-y*chag*Point; tm=120; tm2=240;}
      if(y>kn && y<=kn*2+1){kln=up_s+(y-kn-1)*chag*Point; tm=360; tm2=480;}
      if(y==risk || y==kn+1+risk) {col=Lime; shn=3;} else {col=DarkGoldenrod; shn=0;}
 
   if(ObjectFind(ln)==-1)   
       {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);}}return(0);}
//==============//
 bool cls(int tp,double clos){
   if(tp==0){if(ObjectFind("clsbuy")==-1) 
       {ObjectCreate("clsbuy",2,0,Time[0]+Period()*120,clos,Time[0]+Period()*240,clos);
        ObjectSet("clsbuy",10,0);ObjectSet("clsbuy",6,Magenta); ObjectSet("clsbuy",8,3);}
   else{ObjectSet("clsbuy",1,clos); ObjectSet("clsbuy",3,clos);   
        ObjectSet("clsbuy",0,Time[0]+Period()*120); ObjectSet("clsbuy",2,Time[0]+Period()*240);}}
 
   if(tp==1){if(ObjectFind("clsel")==-1)      
       {ObjectCreate("clsel",2,0,Time[0]+Period()*360,clos,Time[0]+Period()*480,clos);
        ObjectSet("clsel",10,0); ObjectSet("clsel",6,Magenta); ObjectSet("clsel",8,3);}
   else{ObjectSet("clsel",1,clos); ObjectSet("clsel",3,clos);   
        ObjectSet("clsel",0,Time[0]+Period()*360); ObjectSet("clsel",2,Time[0]+Period()*480);}}
       return(0);}
//===================================================//
 int err(int er_){switch(er_)
   {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()," ошибка № ",er_);}return(0);}
//======================================================//




Спасибо!
Причина обращения: