[アーカイブ!】どんなルーキーの質問でも、フォーラムを散らかさないように。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 2. - ページ 465

 
extralifes:

コードを理解するのを助けてください。この状態をどう表現するのが正しいのかわからない。

EAの一部をご紹介します。

if(total<1)

{

while (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2) //Пока это условие выполняется открывать только селл при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)<0.7)) -какой оператор использовать и как его оформить?
{
OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
}

while (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2) // Пока это условие выполняется открывать только Бай при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)>0.3)) - какой оператор использовать и как его оформить?
{
OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

}
}
}
}
何かしらの家庭菜園...。
 
butthead:

心理的な要因が私を阻んでいるのは理解しています...欲...300円でも失うことへの恐怖...です。どうしたらいいんだろう...。本当のアカウントは忘れて...


考え方を変えたらどうだろう? 勝つことを目指す」のではなく、「負けないことを目指す」。
 

理解するのに役立つ!

iMACDが増加している間は買いを継続し、減少し始めたらすぐに買いを閉じて売りを開始する、というのがこのアイデアの本質です。比較は、現在の値を除いた直近の3つの値で行う。

このコードには問題があります。iMACDの値+-0で複数の注文を開いてしまうのです。Normalizedouble() は役に立ちません。

以下はそのコードです。

int start()
  {

double MA1=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,1), 
       MA2=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,2),
       MA3=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,3);
       
       
       
if (MA1>MA2>MA3 && Napr==1)
    {Closeall();
    Napr=0;
    OrderSend (Symbol(), OP_BUY, Lot, Ask, 5, 0,0);}

if (MA1<MA2<MA3 && Napr==0)
    {Closeall();
    Napr=1;
    OrderSend (Symbol(), OP_SELL, Lot, Bid, 5, 0,0);}



   return(0);
  }
 
extralifes:

コードを理解するのを助けてください。この状態をどう表現するのが正しいのかわからない。

Expert Advisorの一部をご紹介します。


total=OrdersTotal();

if(total<1)

{

while (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2) //Пока это условие выполняется открывать только селл при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)<0.7)) -какой оператор использовать и как его оформить?
{
OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
}

while (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2) // Пока это условие выполняется открывать только Бай при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)>0.3)) - какой оператор использовать и как его оформить?
{
OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

}
}
}
}
正しい方法を教えてください。


このような仕組みになっていないのでしょうか?

total=OrdersTotal();
if(total<1)

{

  if (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 &&  iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7)
        OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
   

  if (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0) > 0.3) 
       OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

  }
 

動作しない場合はスルーしてください。

iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7) なら売り注文だけを出すという条件(d_mn_1>d_pl1 && (d_mn_0-d_pl_0)>=2 )さえ合っていればいいのだそうです。

それは逆も同じです。

whileやboolでできるのでしょうか?プログラミングで完全なパンク状態です。論理的な連鎖は理解できるのですが、コードに変換する手が遅いんです。

 
extralifes:

動作しない場合はスルーしてください。

iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7) の条件で売り注文のみを出すのは、(d_mn_1>d_pl1 && (d_mn_0-d_pl_0)>=2 が合って いれば良いのです。

それは逆も同じです。

whileやboolで書けますか?プログラミングで完全なパンク状態です。論理的な連鎖は理解できるのですが、コードに変換する手が遅いんです。

お金がなくなるまで開くのか、1バーにつき1回開くのか、1ティックにつき1回開くのか?
 

こんにちは!StopOutに引っかからないように(たまに引っかかるけど)。最悪の状態でもStopOutに引っかからないような値でロットを制限することにしました。長い間、試行錯誤を繰り返しながら。どなたか解決策をお持ちではないでしょうか?

入力データです。

- 通貨ペア - 必ずしもEURUSDとは限りません。

- 値

- 指定したStopLossのポイント(最悪StopLossレベルに達してもStopOutをつかまないことを想定している)

- ロット設定値

- その他の値は、MT4の機能(1ロットサイズ、レバレッジ、クロスレート)を使用して取得する必要があります。

コードがあれば望ましい。

理論的には、残高からStopLossレベルでの可能な損失を証拠金で割ったものが必要であることは理解しています。そしてこの値はStopOutより大きくなければなりません(パーセントで)。

 
Cmu4:

理解するのに役立つ!

iMACDが増加している間は買いを継続し、減少し始めたらすぐに買いを閉じて売りを開始する、というのがこのアイデアの本質です。比較は、現在の値を除いた直近の3つの値で行う。

このコードには問題があります。iMACDの値+-0で複数の注文を開いてしまうのです。Normalizedouble() は役に立ちません。

以下はそのコードです。


int start()
  {

double MA1=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,1), 
       MA2=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,2),
       MA3=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,3);
       
       
       
if (MA1>MA2 &&  MA2>MA3 && Napr==1)
    {Closeall();
    Napr=0;
    OrderSend (Symbol(), OP_BUY, Lot, Ask, 5, 0,0);}

if (MA1<MA2 && MA2<MA3 && Napr==0)
    {Closeall();
    Napr=1;
    OrderSend (Symbol(), OP_SELL, Lot, Bid, 5, 0,0);}



   return(0);
  }
もしかしたら、それが問題だったのかもしれない
 
ilunga:
Open until money runs out? or open once per bar? or once per tick?

この条件は、新しい小節 ごとにチェックされます。この場合、時間軸は1時間単位となります。この状態は、各時間の最初にチェックされます。
 
Vinin:

もしかしたら、これが問題だったのかもしれません

いいえ...ご指摘の通りやってみましたが、同じことが繰り返されます。

また、条件によってオープニングとクロージングのブロックに分けるなどして、コードを変更しました。全部同じです。これからどうしたらいいのかわからない。

こちらはテスターのスクリーンショット、トレーラーにあるテスター用のExpert Advisorです。

ファイル:
理由: