[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 742

 
artmedia70:

あなたのコードを扱うのは嫌です(邪道ですが、正直です :))。最終的に何を得たいのかを正確に教えてくれれば、必要な関数を書いてあげます。正直言って......その方が楽なんです。自分のコードを整理しておかないと...。:)

...あるいは、寝て、寝て、次の日にはすべてのパズルが揃う...。:)それが、わからない時の対処法...。ところで、もう5時半を過ぎたので寝ますが...。


オーダーが設定された後、オーダーの基準となった変数を再度「0」に設定する。

 
誰にもわからない。RSIなどの指標の動きと、通過した通貨のティックの比率を知るにはどうしたらいいですか?例えば、RSIが0から50になった場合、何ティックに相当するのでしょうか?
 
Infinity:
誰にもわからない。RSIなどの指標の動き(目盛り)と、通貨の通過したティックの比率を求めるにはどうすればよいですか?例えば、RSIが0から50になった場合、何ポイントに相当するのでしょうか?

ローソク足がゼロの時にRSI指標の最後の値をキャッチする。次のティックを待ちます。ダニがやってきました。Let価格はちょうど1ポイント刻んでいます。RSIがどの程度変化したかを見る。それだけで、オッズは我々のポケットの中にあるのです。
 
drknn:

ローソク足ゼロの最後のRSI指標値をキャッチする。次のティックを待ちます。ティックはこちらです。価格がちょうど1ポイント刻んだとします。RSIがどの程度変化したかを見る。以上、係数は私たちのポケットの中です。

しかし、その後どのように可能ですか、例えば、私は1ポイントの係数をキャッチしている、RSIは50のそのスケールで合格した、それは50ポイントを通過したことが判明したが、実際にはそれがフラットだった。 そして、キャンドルは2ポイントを持っています。では、この場合どのように判断するのか
 
cyclik33:

アナトリーへ。このコード、どうもありがとうございました。もうひとつの質問ですが、常時動作させながら、1バーにつき1ディールしか行わないようにするにはどうしたらよいでしょうか?

ボリス まあ、もっと単純な話なんですけどね。この行を落とすと

datetime new;

コードの一番上に(どの関数にもない、別にすること)。
そして、OrderSend(...)関数の 呼び出しがある箇所では、それをif演算子の追加の抱き合わせで囲むだけです。

if(new != Time[0]){
   new = Time[0];
   // здесь функция OrderSend(...);
}

現在、別のポジションを開く前に、現在のバーに取引が含まれているかどうかをチェックします。もしあれば、現在のバーが変数newに格納され、もし現在のバーが格納されているものと同じであれば、取引は行われません。したがって、バーが新しい場合、その開始時間は変数newのデータと一致しないので、取引は開始され、変数newは 新しい値を取得します。

お使いのExpert Advisorのアーキテクチャを正確に把握しているわけではありませんが、この方法はほとんどの場合において機能するはずです。

 
FoxUA:

注文が設定された後、注文を出す基準となった変数を再度「0」にする必要があります。


あなたのコードをコンパイルしようとしたら、エラーが発生しました。
注文の基準となった変数を2つのメソッド(start()NewOrder1())で使用しなければならないので、全ての関数の外で宣言してください。

bool b,s, //соответственно бай или селл  
bs,// если закрытие по стоплоссу ордера бай
ss,// если закрытие по стоплоссу ордера sell
bt,
st;//      то же по ТП
double bl,sl; // лоты соответсвенно для бай и селл
そして、for ループで
for(int cnt=OrdersHistoryTotal();cnt>0;cnt--)
     {
OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
{if(OrderMagicNumber()== mag &&
OrderSymbol()==Symbol()) 
{ if (OrderType() == OP_BUY )  {b=1; if (OrderClosePrice()==OrderTakeProfit()) bt=1; if (OrderClosePrice()==OrderStopLoss()) bs=1; bl=OrderLots()*10; break;}
if (OrderType() == OP_SELL)  {s=1; if (OrderClosePrice()==OrderTakeProfit()) st=1; if (OrderClosePrice()==OrderStopLoss()) ss=1; sl=OrderLots()*10; break;}
            }
         }
      }


}//end

必要な値を代入し、NewOrder1() 関数で注文が正常に開かれた後、その値もゼロにリセットする必要があります。

int NewOrder1(int Cmd,double Lot)
{double TP=0; //тейкпрофит
double SL=0; //стоплосс
double PR=0; //Цена
double LT=0; //Лот
while(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUYLIMIT)
   {PR=Ask-Point*h;
    if(TakeProfit>0) TP=PR+TakeProfit*Point;
    if(StopLoss>0) SL=PR-StopLoss*Point;
    if(Lot>0) LT=3*Lot;}
int tic1=OrderSend(Symbol(),Cmd,LT,PR,3,SL,TP,0,mag,0,CLR_NONE);
//-----------
if(tic1<0){
   Print(GetLastError());
}else{
b=0;
s=0; 
bs=0;
ss=0;
bt=0;
st=0;
bl=0;
sl=0;
}
//-----------
return(0);}

こんな感じ。

 
Infinity:

誰にもわからない。RSIなどの指標の動き(目盛り)と、通貨が交差する刻みの比率を求めるにはどうしたらよいですか?明確にするために、RSIが例えば0から50になった場合、それは何ティックに等しくなりますか?

私もかつて同じような目標を持っていたので、こんな風に「ものさし」を書いてみたのですが、もしかしたらあなたにも効果があるかもしれませんね。

//+------------------------------------------------------------------+
int get_pips_RSI_path(int home_shift, int end_shift){
   double home_index, end_index;
   double home_price, end_price;
   int path;
   
   home_index = iRSI(NULL,0,14,PRICE_CLOSE,home_shift);
   home_price = Close[home_shift];
   end_index = iRSI(NULL,0,14,PRICE_CLOSE,end_shift);
   end_price = Close[end_shift];
   
   if(end_price > home_price)path = (end_price - home_price)/Point; else path = (home_price - end_price)/Point;
   
   Alert("Между значениями RSI ", home_index, " и ", end_index, " было пройденно ", path, " пунктов.");
   return(path);
}
//+------------------------------------------------------------------+

パラメータとして、希望のRSI値を持つバーのシフトを送信すると、応答としてそれらの間の距離をpipsで取得します。

 
ToLik_SRGV:

私もかつて同じような目標を持っていたので、こんな風に「ものさし」を書いてみたのですが、もしかしたらあなたにも効果があるかもしれませんね。

パラメータとして、希望のRSI値が配置されているバーのシフトを送信し、その応答として、それらの間の距離をpipsで得ることができます。


ありがとうございます、今夜確認してみます

Expert Advisorの履歴に関するテストは、引用履歴が不完全なため、良い結果が出ないのではと強く感じています。私は引用符の歴史は、現在の市場(ローソク足の引用符)をアーカイブすることによって形成されていることを理解しますが、どのように本当の引用符は(少なくとも私の場合)、時には40分間ちょうどないろうそく、チャートが立っているを介して飛んでいる場合、結果に頼ることができますし、それはすべて同じろうそくを飛ぶ。

 
ToLik_SRGV:

もしかしたら、有益なパラメータの組み合わせが見つからなかっただけかもしれません。「無駄な結果を無視する」オプションのチェックを外してみてください。

また、Expert Advisorの設定で、最適化したいパラメータにチェックを入れ、ステップと最適化の制限を設定することを忘れないでください。

ありがとうございます!その通り、「無駄な結果をスキップする」にチェックが入っています。
 
artmedia70:


友よ!トレンドラインが反転したときに表示される不要なシグナルを消す方法がわからない。トレンドライン(例では下降)は、指定されたバーの間隔内で見つかった最大の極値から最小の極値までプロットされます。問題は、新しい最安値の極限が現れるとすぐに、トレンドラインがその極限までジャンプしてしまうことです(そのように設計されているのです)。

しかし、最初のバーでもトレンドラインの値でレベルを構築し、指標ラインによってその交差はシグナルを与える。もし、最初のバーで指標線がこのレベルより下にあり、2番目のバーでこのレベルより上にあれば、トップダウンクロスオーバーが発生したことになります。

それで...トレンドラインが新たな最安値の極限にジャンプしたとき、2本目のバーの指標線がトレンドラインの上にあり、プロットされたレベルと1本目のバーの下にある状況、すなわち不必要な売りシグナル(この場合)が発生します。


私たちは、トレンドが新しい極端に移動したこと(場所は下向き矢印で示されている)と、最初のバーの新しいトレンドの価格水準(水平の赤いダッシュ線)を画像で見ることができます。
が2本目のADラインより低くなり、1本目のADラインが価格水準より低くなった...。
そこで、トレンドラインを下限まで移動させることで、不要なシグナルをシミュレートした......。先ほどと同じように不要な信号が発生した-。
水色の縦線で印をつけました...。

それゆえ、「どうすればこの状況を回避できるのか?何か考えようとすると疲れる...。
何か感想はありますか?ありがとうございます...:)



売買シグナルは指標線とトレンド線が交差したときに発生すべきであり、その逆はないということは理解していますが、その両方を持っているのですね。トレンドラインの位置の以前の値を静的変数に保存し、それらが変化していない場合、クロスオーバーをチェックし、トレンドラインの位置が変化している場合 - リセット...します。