エキスパートアドバイザー - 雑多な質問 - ページ 33

 

MQL4:

MODE_LOTSTEP

24

ロット変更時のステップ


Print("Step for changing lots=",MarketInfo(Symbol(),MODE_LOTSTEP));

MQL5:

シンボルボリュームステップ

取引実行のための最小ボリューム変更ステップ

ダブル


Print(" Step: ",SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

0.01であれば、ロットは0.01、0.02、0.03、0.04などに一致しなければなりません。

それが0.1であるならば、ロットサイズのあなたの変更は、0.1次の0.2次の0.3などを満たさなければならないでしょう。

だから私はあなたを理解していない。

   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

多分あなたは別のロットステップを意味する?

それは各シンボルに対して固定されているので、通常、あなたは値を変更することはありません。

 
Max Enrik:
// lot plus
if(sparam==lotbuttonplus)
  {
   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

直感的な名前の変数の値を変更すると、物事が混乱することがあります。私は、lotstepは常にlotstepであり、それ以外のものではないことを提案します。

こんな感じでどうでしょうか?

   double increment = (lotsize < lotstep*100) ? lotstep : lotstep*100;
   lotmaxdivide=lotmax/lotmax *(lotvalue*10);
   lotsize=fmin(lotmaxdivide,lotsize+(( ctrlfalse) ? increment*10 : increment));
編集:すみません、今Marcoさんの返信を見ました。私もlotstepの命名については賛成です。
 

Marco vd Heijden:

だから、私はあなたのことを理解していない。

   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

多分、あなたは別のロットステップを意味するのでしょうか?
通常は、各シンボルに対して固定されているため、値を変更することはありません。

そうです。EURUSDのロットサイズが1.00になったら、ロットサイズを1.00増やす必要があるんだ。ロットサイズが1.00になったら、ロットサイズを1.00増やす必要があるんだ。ロットサイズが1.00になる前に、ロットサイズを0.01、0.02など増やします。(しかし、ロットサイズが1.00に達した後、ロットサイズは1.00、2.00、3.00、などに増加します。
それは私がこのサブテーマでやりたいことです。

ありがとうございました。

 
honest_knave:

直感的な名前の変数の値を変更すると、物事が混乱することがあります。私は、lotstepは常にlotstepであり、それ以外のものではないことをお勧めします。
こんな感じでどうでしょうか?

   double increment = (lotsize < lotstep*100) ? lotstep : lotstep*100;
   lotmaxdivide=lotmax/lotmax *(lotvalue*10);
   lotsize=fmin(lotmaxdivide,lotsize+(( ctrlfalse) ? increment*10 : increment));
編集:すみません、今Marcoさんの返信を見ました。私もlotstepの命名に賛成です。

( 私は少し変わっただけです - ...lotstep : lotstep*100 - ...? lotstep : lotstep*10 ) です。

そうですね。私のオリジナルのコードでは、物事が混乱しています。
あなたの素晴らしい助けの後、私は私の問題を解決します。ありがとうございました。

また、ロットサイズがこのように増加することを望みます。
0.99, 1.00, 1.01, 1.11の ようにロットサイズが増加するのです。
しかし、私はこのように0.99、1.00、1.10、1.20などのように必要です。

ありがとうございました。

 

0.99, 1.00, 1.01, 1.02...がベストなアイデアだと思います。

最小のステップにこだわってください。

なぜ、このような超大型のステップを踏みたいのですか?

試してみましたか?

ぜひ試してみてください。
 
Marco vd Heijden:

0.99, 1.00, 1.01, 1.02...がベストなアイデアだと思います。
最小のステップにこだわるのがいいと思います。
なぜ、このような超大型のステップを取りたいのですか?
試してみましたか?

ぜひ試してみてください。

私はすでにそれを試してみました、私はロットサイズ5.00に到達する必要がある場合は、ロットプラスボタン(+ Ctrlキー)を40回クリックする必要があると思います。

 

なぜ5つなんだ?

の代わりに + と - を使えばいいんです。

lotsize=lotsize+0.1;
lotsize=lotsize-0.1;

でも、私のロボットには、全滅から救ってくれる一行があるんですよ、これが。

static input double lotsmax=1;// Max Lots (please respect the setting)
 
Marco vd Heijden:

しかし、私のロボットには、全滅から救って くれる一行があり、それはこれです。

それは全くその通りです。また、もちろんその設定も尊重します。

でも、これは単なる問題で、いつでも調整できるんです。
ロットサイズについては、少し経験が必要かもしれません。

このサブトピックは一旦終了しても良いと思います。

Marco vd Heijden@honest_knave に感謝します。

#ロットステップ - 終了

 

#ロットサイズマックス - オープン

Marco vd Heijden- あなたの最新のコメントにとても感謝しています。(他の関数を書くのをやめて、この関数を先に書こうとしています)

ということで、いつも通り、ロットサイズMAXで何かテストしてみます。
ロットサイズがロットサイズマックスより大きい場合、印刷機能はトレードモードについて私に知らせません。
この問題を解決した後、この機能を売りボタンと買いボタンに搭載する必要があります。

Q: 印刷機能でトレードモードを知らせるにはどうしたらいいですか?( - ロットサイズが最大ロットサイズより大きいか、小さいか )
Q: この方法はロットサイズMAXの時に有効ですか?

ありがとうございました。

void example()
  {
   string trademode;
   ENUM_ACCOUNT_TRADE_MODE accounttype=(ENUM_ACCOUNT_TRADE_MODE) AccountInfoInteger(ACCOUNT_TRADE_MODE);

   if(accounttype==ACCOUNT_TRADE_MODE_DEMO)
     {
      switch(accounttype)
        {
         case ACCOUNT_TRADE_MODE_DEMO:
            if( lotsize > ( lotstep * lotsizemax ) ) return;
            trademode="demo";
            break;
         case ACCOUNT_TRADE_MODE_CONTEST:
            trademode="contest";
            break;
         default:
            trademode="live";
            break;
        }
     }
   Print("Trade Mode: ",trademode);
  }
 

デモ口座か ライブ口座かを確認するためのものはなく、コンテストはほとんど使用されていません。

ロットマックスは非常に簡単です。

//---
// calculate lotsize here
//---

// check if lotsize is not too high

if(lotsize>lotsize_max)
{
  lotsize=losize_max;
}