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

 

専門家の事務所に置いてあります。

bool b=0,s=0, //соответственно бай или селл  
bs=0,// если закрытие по стоплоссу ордера бай
ss=0,// если закрытие по стоплоссу ордера sell
bt=0,
st=0;//      то же по ТП
double bl=0,sl=0; // лоты соответсвенно для бай и селл


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

if(bs==1||bl==1)
{   
    NewOrder1(OP_BUYLIMIT,Lot);
    
    Today=TimeDay(TimeCurrent());}
    

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());

return(0);}





 
artmedia70:
ブール変数は、最初はfalseに初期化されていません。一般的には、ループに入る前に、0(false)に設定してください。ループを抜けると、ループ内で割り当てられた値(1よりtrueの方が良い)を持ち、次のループに入るまで、その値を持ち続けることになります。注文の開始がこれらの変数の値に厳密に依存する場合、注文を開始する命令の後、市場におけるこのポジションの存在を確認し、それが存在する場合、変数をゼロ(偽)に設定します。

で、そのコードの中で

 
artmedia70:
現在のバー(できれば1本目)のADX値と前のバー(できれば2本目)のADX値を比較します。

ストレートに言えば、こんな感じでしょうか。

しかし、あまりいい出来ではありません。ADXの値をダブル変数に代入して、変数を操作した方が良いのでは...。






大変お世話になりました:)
 

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

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

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


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

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

 
profitinvesting:
大変お世話になりました:)
どういたしまして :)
 
ToLik_SRGV:

スタート関数の一番最初に、この関数への呼び出し行を追加します。

アドバイザーは1回だけ、新しいバーで起動します。

アナトリーへ。このコード、どうもありがとうございました。もう一つの質問ですが、常に動作するようにするには、1つのバーで1つの取引しかできないようにするにはどうしたらよいでしょうか?
 
artmedia70:
注文の後、ポジションが市場にあるかどうかをチェックし、もしあれば変数をリセットする(false)。

私の注文にどのように実装することができるか教えてください。

注文をゼロに戻すには、どのような関数を挿入すればよいのでしょうか?

 
FoxUA:

私の注文にどのように実装することができるか教えてください。

ゼロに戻すには、どのような関数を挿入すればよいですか?


注文がマーケットにあるかどうかをチェックした後、変数に値を割り当てるだけ です。例Variable1 = false;
注文を出す基準となったループ内で「true」に設定したこれらの変数は、注文が出された後に再び「false」に設定しなければならず、そうしないと注文が一括して出され続けることになります。ですから、これらの変数には"false " を代入してください。
 
artmedia70:
マーケットに注文があるかどうかをチェックした後、変数に値を代入するだけです。例えば、Variable1 = false です。
注文の基準となったループ内で "true "に設定した変数は、注文後に再度 "false "に設定する必要があります。ですから、これらの変数には"false " を代入してください。

私は2日間、あなたの話から何を配置すればいいのか考え、何も理解していないと言わざるを得ません。 私が投稿したコードにこれらの値を入れていただくか、関数を書いて、どこに配置すればいいか正確に教えてください - これは私のパズルの最後の部分ですが、どこに、どう配置すればいいのかわかりません。

 
FoxUA:

私は 2 日間眠れないし、Expert Advisor と苦労している私は何を置くために理解しないので、あなたが言ったから、これらの値を投稿したコードに置くことができますまたはちょうど関数を書くし、どこに正確にそれを置くために教えて私のパズルの最後の作品と私はどこに、それを置くために集中できないこと言わなければなりません。

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

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