Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 542

 
Artyom Trishkin:

Из этого time[i] нужно час вычленить.

Всё равно на принт выводится время 10:05:00 и 22:10:00  и другое за пределами разрешенного.

Не должен принтить с 17 до 11, а он...

 for(int i=limit-2; i>0; i--) 
     {
    if(TimeHour(time[i])>=17&&TimeHour(time[i])<=11)continue;
      if(i%2==0) 
        {
         if(open[i]<close[i] && open[i+1]>close[i+1]) 
           {
            k1++;
            if(k1>max) {max=k1; dat_max=time[i];}
            if(k1>=4)Print("Num: ",k1,"dat_max ",time[i]);
            SetText("Obj_"+(string)time[i],(string)k1,time[i],high[i],Arr);
           }
         else k1=0;
         
           } else {
         if(open[i]<close[i] && open[i+1]>close[i+1]) 
           {
            k2++;
            if(k2>max){ max=k2; dat_max=time[i];}
            if(k2>=4)Print("Num: ",k2,"dat_max ",time[i]);
            SetText("Obj_"+(string)time[i],(string)k2,time[i],high[i],Arr);
           }
         else k2=0;
         
        }
      
     }

   Comment("Max: ",max,"dat_max ",dat_max," rates_total ",rates_total);

 
if(TimeHour(time[i])>=17 || TimeHour(time[i])<=11)continue;
 
Taras Slobodyanik:

Спасибо.

 
k_chens:

Добрый день! Помогите, пожалуйста! Пробую написать управление количеством лотов. Если на моём счету становится +10% прибыли, лот удваивается. Если +20%, то лот*4. И если на счету уменьшается то соответственно  уменьшается размер лота. Не понимаю как сделать, чтобы Lots_New при каждой новой сделке брало новое значение.

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

Наиболее универсальным решением (если планируется использовать программу на разных компьютерах без возможности передачи данных между копиями программы) является сканирование истории счета на предмет расчета прибыли/убытка, полученной в результате работы программы. Но и тогда встает вопрос о выборе точки отсчета (где взять значение баланса, от которого нужно вести отсчет).

 
Здравствуйте, объясните пожалуйста строчки для выбора меджика :

Extern bool hand orders =true ;
Extern int Magic_Number =7777;
   
//первая строчка
((OrderMagicNumber()==Magic_Number && hand_orders==false) || (OrderMagicNumber()==0 && hand_orders==true)))

//вторая строчка 
        (OrderMagicNumber()==Magic_Number || (OrderMagicNumber()==0 && hand_orders==true)))


Какие значения меджиков они пропускают? Напишите пожалуйста 
 
Tigerfreerun:
Здравствуйте, объясните пожалуйста строчки для выбора меджика :

Extern bool hand orders =true ;
Extern int Magic_Number =7777;
   
//первая строчка
((OrderMagicNumber()==Magic_Number && hand_orders==false) || (OrderMagicNumber()==0 && hand_orders==true)))

//вторая строчка 
        (OrderMagicNumber()==Magic_Number || (OrderMagicNumber()==0 && hand_orders==true)))


Какие значения меджиков они пропускают? Напишите пожалуйста 

замените в ваших выражениях - && на фразу "И В ТО ЖЕ ВРЕМЯ", а || замените на слово "ИЛИ"

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


первая строчка работает ЛИБО с маджиком=7777 (при hand_orders=false), ЛИБО с маджиком=0 (при hand_orders=true)

вторая строчка ВСЕГДА работает с маджиком=7777, а при hand_orders=true работает ДОПОЛНИТЕЛЬНО с маджиком=0

 

Как подсчитать, в одной функции, профит в пунктах по двум инструментам?

Кручу

double Punkts_B(string Sy_1="",string Sy_2="",int _Mag=-1)
  {
   double xxx=0;
   bool bw;
   for(int t=0;t<=OrdersTotal();t++)
     {
      bw=OrderSelect(t,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Sy_1 || OrderSymbol()==Sy_2
         && OrderMagicNumber()==_Mag
         && (OrderType()==OP_BUY || OrderType()==OP_SELL))
         xxx=OrderClosePrice()-OrderOpenPrice();
      RefreshRates();
     }
   return(xxx);
  }
 
PolarSeaman:

Как подсчитать, в одной функции, профит в пунктах по двум инструментам?

Кручу

int Punkts_B(string Sy_1="",string Sy_2="",int _Mag=-1)
  {
   int xxx = 0;
   double tickValue_1 = SymbolInfoDouble(Sy_1, SYMBOL_TRADE_TICK_VALUE),
          tickValue_2 = SymbolInfoDouble(Sy_2, SYMBOL_TRADE_TICK_VALUE);
   for(int t=0;t<OrdersTotal();t++)
     {
      if( !OrderSelect(t,SELECT_BY_POS,MODE_TRADES) )  continue;
      if( OrderSymbol()!=Sy_1 && OrderSymbol()!=Sy_2 ) continue;
      if( OrderMagicNumber()!=_Mag )                   continue;
      if( OrderType()!=OP_BUY && OrderType()!=OP_SELL) continue;
      xxx+=(int)((OrderProfit()+OrderSwap()+OrderCommission())/(OrderSymbol()==Sy_1 ? tickValue_1 : tickValue_2));
     }
   return(xxx);
  }
 
Konstantin Nikitin:
пункты двух разных инструментов нельзя складывать.
 
Maxim Kuznetsov:
пункты двух разных инструментов нельзя складывать.

Он просил, в пунктах, вот ему в пунктах. А там пусть думает =)