MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 542

 
Artyom Trishkin:

この時間[i]から、1時間を抽出する必要があります。

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%の利益が出た場合、ロットは2倍になります。もし+20%なら、ロット*4。私のアカウントで減少した場合、それぞれロットサイズを減少させます。Lots_Newが新規取引ごとに新しい値を取るようにする方法がわかりません。

これは、プログラミングを学び始めたばかりの人間にとっては、決して些細なことではありません。結局、それを解決するためには、次の残高値を格納する仕組みを考えなければならない。さらに、この値をどこに格納するかを考えなければならない。プログラム中の変数はこの目的には適さない。例えば、端末のグローバル変 数を利用したり、ファイルに書き込んだりします。すべては、あなたがどこで、どのようにプログラムを使用する予定かによります。

最も普遍的な解決策(プログラムのコピー間でデータを転送する可能性がない別のコンピュータ上で使用することを計画している場合)は、プログラムの仕事の結果として得られた、利益/損失を計算するために口座履歴をスキャンすることです。しかし、その場合、基準点(どこからカウントアップするバランス値を得るか)を選ぶという問題もある。

 
こんにちは、メディジックを選択するためのラインについて教えてください。

外部ブールハンドオーダー =true ;
Extern int Magic_Number =777;
//1行目
((OrderMagicNumber()==Magic_Number && hand_orders==false) || (OrderMagicNumber()==0 && hand_orders==true))

//2行目
(OrderMagicNumber()==Magic_Number || (OrderMagicNumber()==0 && hand_orders==true)))


どのようなメディック値が不足しているのでしょうか?を書いてください。
 
Tigerfreerun:
こんにちは、medjicを選択するためのラインを説明してください。

外部ブールハンドオーダー =true ;
Extern int Magic_Number =777;
//1行目
((OrderMagicNumber()==Magic_Number && hand_orders==false) || (OrderMagicNumber()==0 && hand_orders==true))

//2行目
(OrderMagicNumber()==Magic_Number || (OrderMagicNumber()==0 && hand_orders==true)))


どのようなメディック値が不足しているのでしょうか?を書いてください。

を "AND AT THE SAME TIME "に、||を "OR "に置き換えてください。

を読めば、その仕組みがわかるはずです。


最初の行は、magic =777 (hand_orders=false のとき) または magic = 0 (hand_orders=true のとき) のどちらかで機能します。

2行目はmajic=777で常に動作し、hand_orders=trueの場合はmajic=0で追加的に動作します。

 

2つの商品の利益を1つの関数で pips単位で計算するにはどうしたらいいですか?

ローリング

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:

2つの商品の利益を1つの関数で pips単位で計算するにはどうしたらいいですか?

ローリング

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:
異なる2つの楽器のポイントを重ねることはできません。
 
Maxim Kuznetsov:
異なる2つの楽器の点数を合算することはできません。

と尋ねると、ポイントで、ここにいる。考えさせてあげてください =)