Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 371

 
SpikeOne:


Я похоже нашёл косяк=) в начальных данных где шаг между ордерами указано значение int а я ставил 1.7, поменял на double заработало нормально=)


Ну здорова)))) когда находишь ошибку, понимаешь. что всё было проще, нежили ты думал)
 
Ekburg:

тут тогда я не помощник) нужно весь советник перебирать.

В общем поменял все на double, щас работает нормально, нужно остальные моменты протестировать=) Если заставлю советника норм собирать прибыль то могу выложить если надо будет=)

А так спасибо за помощь, без тебя бы не разобрался в чем проблема=) хотел было дело вообще забить на это=) он непонимания почему же не работает=) хорошо что не забил=)

 
SpikeOne:

В общем поменял все на double, щас работает нормально, нужно остальные моменты протестировать=) Если заставлю советника норм собирать прибыль то могу выложить если надо будет=)

А так спасибо за помощь, без тебя бы не разобрался в чем проблема=) хотел было дело вообще забить на это=) он непонимания почему же не работает=) хорошо что не забил=)


Можно, почему бы и нет)

Да не за что)

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

 
Необходимо записать время после сигнала 1 и не менять его пока не придет сигнал 2, при этом в процессе ожидания сигнала 2 будет неоднократно возникать сигнал 1, но время должно оставаться неизменным с момента получения первого сигнала 1.
 
Forexman77:
Необходимо записать время после сигнала 1 и не менять его пока не придет сигнал 2, при этом в процессе ожидания сигнала 2 будет неоднократно возникать сигнал 1, но время должно оставаться неизменным с момента получения первого сигнала 1.

int sm;
datetime data;
if(sm==0) if(сигнал1==true) data=TimeLocal(); sm=1;
if(sm==1) if(сигнал2==true) data=TimeLocal();
 
extern bool test=false;  // откл объектов при тесте
extern int prof=4;     // уровень профита
extern int chag=3;     // шаг между ордерами
extern int risk=0;         //уровень риска
extern double lot = 0.01; // начальный лот
extern double k_lot=2; // увеличение объема
extern double lot_max=100; // максимальный лот
//=====================================================//
int kn=20;  // величина вертикальной шкалы
int magic = 37649; 
extern double  BeginHour =3;
bool result;
bool fail=false; 
double gg=0;
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++)
   {OrderSelect(y,0,0); if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=magic||(OrderType()!=0&&OrderType()!=1)) continue;
      prov=prov+OrderProfit()+OrderSwap()+OrderCommission();}
   if(prov<0&&prov<GlobalVariableGet(nh+"_max_prov"))GlobalVariableSet(nh+"_max_prov",prov);}
 
//=================================================//
    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()==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) OrderDelete(tick_blm);
   if(tick_s==0 && tick_slm!=0) OrderDelete(tick_slm);
   if (AccountBalance()>gg)
   {
    gg= AccountBalance();
   }
   if(Hour() >= BeginHour )
{
if ( AccountEquity()>=gg)
   {
 //if(AccountEquity()>=740)
  // {
 
   for(int zx=OrdersTotal(); zx+1>=0; zx--)
      {
      if(OrderSelect(zx,SELECT_BY_POS,MODE_TRADES)==true)
      OrderDelete(OrderTicket());
      }
   while (OrdersTotal()>0)
      {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
         {
         if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
         if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
         if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
         OrderDelete(OrderTicket());
         if(result!=TRUE)
            {
            er=GetLastError();
            Print("LastError = ",er, " ",Symbol());
            }
         else er=0;
         }
      else Print( "Error when order select ", GetLastError());
      }
   if(OrdersTotal()==0) fail=true;
   }
}
if(fail==true) return(0);
 
   if(or_bu==risk && tick_b==0) open(0);
   if(or_sl==risk && tick_s==0) open(1);

вот в общем то код, вставляется он в начало заменяется вся часть до места которое я привёл ниже, вот сам советник в который нужно вставить начало https://www.mql5.com/ru/code

запускаете ночь примерно в 00:00 и он торгует до определённого времени, после закрывает торги и советника.

if(or_bu==risk && tick_b==0) open(0);
if(or_sl==risk && tick_s==0) open(1);
 
Ekburg:


Нужно несколько сложнее. От сигнала 1 зависит переменная, поэтому пока нет сигнала 2, будут обновлятся данные, которые использует сигнал 1, изменяя переменную, но мне надо чтобы переменная один раз изменилась. Последующие изменения переменной только после сигнала 2. Если вкратце сработал выключатель 1, запустил одно и больше ничего не меняется до срабатывания выключателя 2. Но, в так как 1 выключатель использует определенные данные для включения, то он будет их обрабатывать снова, а надо всего один раз.

 
SpikeOne:

вот в общем то код, вставляется он в начало заменяется вся часть до места которое я привёл ниже, вот сам советник в который нужно вставить начало https://www.mql5.com/ru/code

запускаете ночь примерно в 00:00 и он торгует до определённого времени, после закрывает торги и советника.


и что?! работает?:)
 
Forexman77:

Нужно несколько сложнее. От сигнала 1 зависит переменная, поэтому пока нет сигнала 2, будут обновлятся данные, которые использует сигнал 1, изменяя переменную, но мне надо чтобы переменная один раз изменилась. Последующие изменения переменной только после сигнала 2. Если вкратце сработал выключатель 1, запустил одно и больше ничего не меняется до срабатывания выключателя 2. Но, в так как 1 выключатель использует определенные данные для включения, то он будет их обрабатывать снова, а надо всего один раз.


Я дал Вам основу, вперёд, дальше сами! Что за лень то такая.. как описали, так и я написал, даже спасибо не сказали;)
 
Ekburg:

Я дал Вам основу, вперёд, дальше сами! Что за лень то такая.. как описали, так и я написал, даже спасибо не сказали;)
Спасибо! Если често основу сам знаю)
Причина обращения: