どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 1063

 
mould:
が、このモードを有効にするにはどうしたらいいのでしょうか?

テスターウィンドウの左下にあるチェックボックスにチェックを入れます。

 

こんにちは、Guruです。

私が正しい道を歩んでいるかどうか、教えてください。

目的:MAからの距離による敷地面積の可変性を導入する。

入力パラメーターに

extern double Lot1 = 0.01; // 最初のロットのバリエーション
extern double Lot2 = 0.03; // 2番目のロットのバリエーション
extern int Distan = 20; // SlowMAからの距離

MaはExpert Advisor本体に定義されています。

double SlowMA = iMA(NULL,60,periodSlowMA,0,MODE_EMA,PRICE_MEDIAN,0);

さらに、現在の価格(方向によってBidまたはAsk)がDistant sizeまでであれば、最初のロットサイズを使用し、それ以上であれば、2番目のものを使用するという条件も必要です。

真っ先に思い浮かんだのは

if (Ask-SlowMA<Distan)ロット==Lot1;
if (SlowMA-Bid<Distan)ロット==Lot1;
if (Ask-SlowMA>Distan)ロット==Lot2;
if (SlowMA-Bid>Distan) Lot == Lot2;

でも、うまくいかないんです。ロット接続か一般的なロジックのどちらかに誤りがある。

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

 
delf699:

こんにちは、Guruです。

私が正しい道を歩んでいるかどうか、教えてください。

目的:MAからの距離による敷地面積の可変性を導入する。

入力パラメーターに

extern double Lot1 = 0.01; // 最初のロットサイズ
extern double Lot2 = 0.03; // 2番目のロットのバリエーション。
extern int Distan = 20; // スローマからの距離

Expert Advisorの本体で定義されたMa:

double SlowMA = iMA(NULL,60,periodSlowMA,0,MODE_EMA,PRICE_MEDIAN,0);

さらに、現在の価格(方向によってBidまたはAsk)がDistant sizeまでであれば、最初のロットサイズを使用し、それ以上であれば、2番目のものを使用するという条件も必要です。

真っ先に思い浮かんだのは

if (Ask-SlowMA<Distan) Lot == Lot1;
if (SlowMA-Bid<Distan) Lot == Lot1;;
if (Ask-SlowMA>Distan) Lot == Lot2;
if (SlowMA-Bid>Distan)ロット==ロット2;

でも、うまくいかないんです。Lotとの連携ミスか、一般的なロジックでのミスか。

よろしくお願いします。

Ask、Bid、SlowMAの値は、Ask-SlowMAがDistanより大きくなる可能性がある場合、どのような値になるのか?
 

Bid と Ask は、最後に判明した入札価格と売呼値、すなわち現在の価格です。

SlowMAは私の改名したMaです。

(double SlowMA = iMA(NULL,60,periodSlowMA,0,MODE_EMA,PRICE_MEDIAN,0);)

現在の価格(BidまたはAsk)とMa(SlowMA)の乖離は、Distansより大きくても小さくてもかまいません。これによって、1ロット目か2ロット目のどちらかを設定する必要があります。

入金額や未決済注文の数によってロットを変えるというバリエーションもありましたが、このような直線的な項では反応が得られないのです。

なんか、絶対値を返す関数が必要な気がする。つまり、負の数に適用すれば、結果は正になる。

 
delf699:

Bid と Ask は、最後に判明した入札価格と売呼値、すなわち現在の価格です。

SlowMAは私の改名したMaです。

(double SlowMA = iMA(NULL,60,periodSlowMA,0,MODE_EMA,PRICE_MEDIAN,0);)

現在の価格(BidまたはAsk)とMa(SlowMA)の乖離は、Distansより大きくても小さくてもかまいません。このため、1ロット目か2ロット目のどちらかを設定する必要があります。

入金額や未決済注文の数によってロットを変えるというバリエーションもありましたが、このような直線的な項では反応が得られないのです。

なんか、絶対値を返す関数が必要な気がする。つまり、負の数に適用すれば、結果は正になる。


BidとMAの差の絶対値は後で少し必要になるかもしれませんが、ヒントがないので、一緒に計算してみましょう。

ビッド=1.12730。

MA=1.12530です。

Distans = 20;

質問です。

1.1273から1.1253がいつ、20を超えるかどうか?

なぜか私の計算機では0.002としか表示されない。でも、20歳までは遠いな...。

 

ありがとうございます、そうですか。あるいは、こんな風にもできます。

dist=Distan*Point。

if (Ask-SlowMA<dist) Lot == Lot1;
if (SlowMA-Bid<dist) Lot == Lot1;
if (Ask-SlowMA>dist) Lot == Lot2;
if (SlowMA-Bid>dist) Lot == Lot2.If (Ask-SlowMA<dist) Lot == Lot1; if (Ask-SlowMA>dist) Lot == Lot2.If (Ask-SlowMA<dist) Lot == Lot2;

では、どうすれば正しくできるのでしょうか?

 
delf699:

ありがとうございます、そうですか。あるいは、こんな風にもできます。

dist=Distan*Point。

if (Ask-SlowMA<dist) Lot == Lot1;
if (SlowMA-Bid<dist) Lot == Lot1;
if (Ask-SlowMA>dist) Lot == Lot2;
if (SlowMA-Bid>dist) Lot == Lot2.If (Ask-SlowMA<dist) Lot == Lot1; if (Ask-SlowMA>dist) Lot == Lot2.If (Ask-SlowMA<dist) Lot == Lot2;

では、どうすれば正しくできるのでしょうか?

そして、MathAbs()を使って、何から何を引くかというトラッキングで考えすぎるのをやめる ことができるようになったのです。そして、もう一つ面白い条件演算子があります

Lot = MathAbs(Ask-SlowMA) < dist ? Lot1 : Lot2;


つまり、Ask-SlowMAがdistより小さい場合、Lot変数にLot1の値が割り当てられ、そうでない場合、Lot2の値が割り当てられます。

もう一つお勧めしたいのは、「Point」変数 についてです。PointまたはPoint()関数を使用する

 
ありがとうございます。美しい解答です。
 
もう目がおかしくなりそうです、どこの括弧が足りないのかわからず、'(' - アンバランスな左括弧 test.mq4 31 8 (TrendDetection() が呼ばれた行から) のようなエラーが出ます。

まだまだ勉強中の身なので、助けてほしい...。


#define BULL 1;
#define BEAR 2;

//--------------------------------------------------------------------
extern int SL = 200;
extern int TP = 200;
extern double Lots = 0.01;
extern double SarStep = 0.02;
extern double SarMaximum = 0.2;
extern int slippage = 5;
extern int Magic = 1;
extern int MaxOrder = 1;
string OrderComments = "Bargain 1.0;
int Cnt=0;
datetime PreviousBar;

int start()
{
Cnt=OrdersTotal()。
{
if (Cnt<MaxOrder)
{
if(NewBar() == true)
{
if(TrendDetection() == BULL){。
OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),スリッページ,NormalizeDouble(Ask,Digits)-(SL*ポイント),NormalizeDouble(Ask,Digits)+(TP*ポイント),オーダーコメントマジック、 0,CLR_NONE);}; }.
if(TrendDetection() == BEAR){。
OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),スリッページ,NormalizeDouble(Bid,Digits)+(SL*Point),NormalizeDouble(Bid,Digits) -(TP*Point),OrderComments,Magic,0,CLR_NONE);}; }; }; }.
}
}
さもなくば
{return(0);}。
}
return(0)です。
}

int TrendDetection()
{
double Sar = iSAR(NULL,0,SarStep,SarMaximum,1);
if(Close[1] > Sar) {return(BULL);}。
if(Close[1]<Sar) {return(BEAR);}。
return(0);}。
bool NewBar()
{
if(前Bar<Time[0])
{
PreviousBar = Time[0];
return(true)です。
}
さもなくば
{
return(false)です。
}
return(false)です。
}
 
AlexeyVik:

そして、MathAbs() を適用することで、何から何を引く かを把握する必要がなくなるようになりました。そして、もう一つの興味深い条件演算子


つまり、Ask-SlowMAがdistより小さい場合、Lot変数にLot1の値が割り当てられ、そうでない場合、Lot2の値が割り当てられます。

もう一つお勧めしたいのは、「Point」変数についてです。PointまたはPoint()関数を使用する

Pointは どうでしょうか、すべてうまくいっているように見えますが?