アスク! - ページ 64

 
ryanklefas:
normalizeDouble関数も使えると思うのですが。 また、MathFloor関数とMathCeiling関数を使用して同じことを実現しているコードも見たことがあります。

つまり、私が「変数 Begin」セクションで以下のようにコード化したように、計算が機能するはずだということですね。

double LotSize = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 3);

というのは、以下のように設定すると、私の問題は別のところにあるのかもしれません。

extern bool LotSizeManager = True;

を設定すると、EAはどんな取引も実行しません。私はそれをfalseに設定すると、それは取引を実行 します。この値がTrueの時に取引が実行されないのは、計算に問題があるためだと思われます。

 
waaustin:
double LotSize = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 3);

double LotSize = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 1); // 0: フルロット、1: ミニロット、2: マイクロロット、3: 未使用

 
Michel:
double LotSize = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 1); // 0: fullllots, 1: minilots, 2: microlots, 3: never used.

つまり、どのような精度でロットサイズを設定するかに依存するということですね。もし私が0.75ロットのようなマイクロロットの精度を望むなら、私は2という値を使うでしょう。

 
waaustin:
つまり、私がロットサイズをどのような精度にしたいかに依存するということですね。私は0.75ロットのようなマイクロロットの精度が必要な場合は、だから私は2の値を使用します。

はい、わかりました。

しかし、マイクロロット(小数点以下2桁)があなたのブローカーとあなたが持っている口座のタイプにOKであることを確認してください。

私はIBFXがミニアカウントでどのように動作するか、つまり、ミニアカウントのマイクロロットもミニロットと呼ばれ、小数点以下が1つしかないのかどうか、よくわかりません。多分、IBFXを使用している誰かがここで答えるかもしれません?

とはいえ、一番良いのはブローカーに聞くことです。

 
Michel:
はい、わかりました!

しかし、マイクロロット(小数点以下2桁)があなたのブローカーとあなたが持っている口座のタイプで大丈夫であることを確認してください。

私はIBFXがミニアカウントでどのように動作するか、つまり、ミニアカウントのマイクロロットもミニロットと呼ばれ、小数点以下が1つしかない場合、あまりよく知りません。多分、IBFXを使用している誰かがここに答えるかもしれません?

とはいえ、一番はブローカーに聞くことです。

どうもありがとうございます。ロットサイジングコードは問題なく動作しているようです。しかし、私はコードのどこかに別のバグを持っているようで、それを理解することができません。

私は複数のペアでEAをロードしていますが、それは1つのペアでだけ取引を配置します。ロットサイジングコードは問題なく動作します。しかし、他の通貨 ペアではそれ以上取引を行いません。しかし、以下の値を設定すると

extern bool LotSizeManager = False;

を設定すると、EAは私がEAにアタッチしているすべての通貨ペアで取引を行うようになります。

 
waaustin:
どうもありがとうございます。LotSizingのコードは問題なく動作しているようです。しかし、コードのどこかに別のバグがあるようで、それがわからないのです。

複数のペアでEAをロードしていますが、1つのペアでしか取引を行いません。ロットサイジングコードは問題なく動作します。しかし、他の通貨ペアではそれ以上取引を行いません。しかし、以下の値を設定すると

extern bool LotSizeManager = False;

EAは、私がEAに接続したすべての通貨ペアのために取引を配置します。

気にしないでください。問題がどこにあるのかわかりました!ありがとうございました。

 

問題:ユーザーが定義した時間に、EAが保留中の注文を 出そうとするが、ブローカーが注文を受け入れるには現在の価格が近すぎる。

質問注文を受け入れるまで、1分バーのiOpenを1分ごとにチェックするループをどのようにコード化すればよいでしょうか。ただ、注文を入力できるようになるまで、1分ごとにチェックする方法を組み込むことができません。現在のコードは数分後に何を探しているのか忘れてしまうようです。なぜなら価格がエントリーの邪魔になると何も起こらないからです。

その一部は以下の通りだと思います。

double Open_Price_Every_Minute;

Open_Price_Every_Minute = iOpen(NULL,PERIOD_M1,0).Open_Price_Every_Minute = iOpen(NULL,PERIOD_M1,0);

Open_Price_Every_Minute = NormalizeDouble(Open_Price_Every_Minute, Digits) です。

if (Allow_LimitOrder_for_Entry_A==false)

{

OrderSend(Symbol(), OP_BUYSTOP, Lots, LA, Slippage, LASL, LATP, "", Magic, 0, FireBrick);

OrderSend(Symbol(), OP_SELLSTOP, Lots, SA, Slippage, SASL, SATP, "", Magic, 0, FireBrick);

}

いつもながら、ご助力とお時間をいただきありがとうございます。

ジェームス

 
proverbs:
現在のコードは、価格がエントリーの邪魔になると何も起こらないので、数分後には何を探しているのか忘れているように思えます。

EAでloopを無限に走らせるのはどうかと思います。 私は試したことがありませんが、良いことだとは思えません。 もし、EAに「記憶」させたいのであれば、記憶させたいデータを静的変数(メイン関数の 外で宣言する変数)またはMT4グローバル変数として保存してください。

 
ryanklefas:
EAでループを無限に走らせるのはどうかと思います。 私は試したことがありませんが、良いこととは思えません。 もし、EAに「記憶」させたいのであれば、記憶させたいデータを静的変数(メイン関数の外で宣言された変数)またはMT4のグローバル変数として保存してください。

おいおい。

ea 処理をループに入れるのは良い方法だ、これを読め。

https://www.mql5.com/en/articles/1462

ただ、正しい方法で行う必要があります。

 

Kalenzoです。

記事をありがとうございました。私は求めた以上のことを学ぼうとしているようだ。