新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 542

 
Artyom Trishkin:

从这个时间[i]应该提取一个小时。

仍然打印出10:05:00和22:10:00的时间以及其他允许时间之外的时间。

它不应该从17:00到11:00打印,但它确实在打印。

 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在每次新的交易中取得新的价值。

对于一个刚刚开始学习编程的人来说,这远远不是一项琐碎的任务。毕竟,为了解决这个问题,你必须想出一个存储下一个平衡值的机制。此外,我们需要弄清楚在哪里存储这个值。程序中的变量不适合用于这一目的。例如,你可以使用终端的全局变量 或将其写入文件。一切都取决于你打算在哪里和如何使用该程序。

最通用的解决方案(如果该程序计划在不同的计算机上使用,而不可能在程序副本之间传输数据)是扫描账户历史记录,以计算利润/亏损,作为程序工作的结果获得。但是,还有一个选择参考点的问题(从哪里获得平衡值,再往上算)。

 
你好,请你解释一下选择医疗机构的线路。

外部 bool hand orders =true 。
Extern int Magic_Number =777;
//第一行
((OrderMagicNumber()==Magic_Number && hand_orders==false) || (OrderMagicNumber()==0 && hand_orders==true)

//第二行
(OrderMagicNumber()==Magic_Number || (OrderMagicNumber()==0 && hand_orders==true))


他们缺少什么样的医学价值?请写
 
Tigerfreerun:
你好,请解释一下选择medjic的线路。

外部 bool hand orders =true 。
Extern int Magic_Number =777;
//第一行
((OrderMagicNumber()==Magic_Number && hand_orders==false) || (OrderMagicNumber()==0 && hand_orders==true)

//第二行
(OrderMagicNumber()==Magic_Number || (OrderMagicNumber()==0 && hand_orders==true))


他们缺少什么样的医学价值?请写

在你的表达式中,将&&改为 "同时",将||改为 "或"。

你应该能够读懂,并看到它是如何工作的。


第一行将在magic =777(当hand_orders=false时)或magic = 0(当hand_orders=true时)下工作。

第二行总是在majic=777的情况下工作,如果hand_orders=true,它在majic=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:
两个不同乐器的点数不能相加。

他问,在点上,他在这里点上。让他想想吧 =)