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

 
KostelloArtua:

ヒントを本当にありがとうございました!!!私の問題を解決してくれました。私が探していたブローカーは、成行注文をするとき、つまり条件に従って、同時にストップレベルを置くことができないことが判明したのです。現在、注文はストップレベルなしで行われ、私は各注文の直後にストップレベルを設定しています。注文のごく一部だけが変更され、ほとんどの注文は「Expert Advisors」セクションに次のような結果が表示されるのですが、これには問題があります。

2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: open #30906670 sell 0.01 CLM1 at 99.79 ok
2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: invalid ticket for OrderModify function
2011.05.19 09:55:40 Spacenewcomer-Svecha ESM1,M5: open #30906787 buy 0.01 ESM1 at 1337.50 ok

2011.05.19 10:00:03 Spacenewcomer-Svecha EURUSD,M15: OrderModify 関数の無効なチケットです。

以下はコード文です。

{
res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red);


OrderModify(OrderTicket(),OrderOpenPrice(),Ask+StopLoss*Point, Ask-TakeProfit*Point,0,Red);
return(0);

}

しかも、Expert Advisorを起動した後、最初に変更される順番です!

明らかに、コード内のオーダーの変更設定を間違えています...。お願い、助けて!

res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red);

OrderSelect(res, SELECT_BY_TICKET);
OrderModify(OrderTicket(),, OrderOpenPrice(),NormalizeDouble(Ask+StopLoss*Point, Digits),NormalizeDouble( Ask-TakeProfit*Point, Digits),0,Red);
 
ilunga:
res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0,「基本」,_MagicNumber,0,赤)。

OrderSelect(res, SELECT_BY_TICKET);
OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble( Ask+StopLoss*Point,Digits),NormalizeDouble( Ask-TakeProfit*Point,Digits),0,Red) を実行。
情報ありがとうございます!!!
 
Sancho77:
親愛なるプログラマーの皆様、Expert Advisorの修正についてご相談です:オープンポジションを持ち、しばらくすると同じ方向でポジションをオープンする2つ目のシグナルがあります。最初の注文がすでにプラスの位置にある場合のみ、2つ目のシグナルでポジションを埋めたいのです。残高サイズと自己資本を比較することで実装しました(自己資本が残高より大きければ、開いた注文はプラスになります)。
最後に持っているオープンオーダーの利益/損失を決定するためのコードを提案してもらえますか?

彼のチケット番号が保存されている場合は、単に

OrderSelect(ticket, SELECT_BY_TICKET);

if (OrderProfit() > )

{

          // доливаем ордер

}
 
ilunga:

彼のチケット番号が保存されている場合、単に


ありがとうございました。前回注文したチケットの保存方法を教えてください。
 
Sancho77:
ありがとうございました。前回の注文のチケットを保存する方法を教えてください。

さて、最も簡単な方法は、グローバル変数 int ticket を宣言することです。

を、ticket = OrderSend(...) に置き換えてください。

最後に開いた注文の番号が常に保存されます。

または、トピック「KimIVの便利な機能」のみを ご覧ください。

 
ilunga:

さて、最も簡単な方法は、グローバル変数 int ticket を宣言することです。

を、ticket = OrderSend(...) に置き換えてください。

最後に開いた注文の番号が常に保存されます。

または「KimIVの便利な機能」トピックのみ 参照

いつもありがとうございます
 
rustein:

エラーを見つけるのを手伝ってください。

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


BuySL*Point // зачем умножать на Point ? Тоже самое для SelSL*Point
 
khorosh:

ありがとうございます。

どうだろう...うまくいくと思ったが、どちらかがないとうまくいかない、そうしたらうまくいった・・・。

//-----
  double Spread = (NormalizeDouble(Ask,Digits) - NormalizeDouble(Bid,Digits)) / Point;
  double BuySL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,0,1),Digits);
  double SelSL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,1,1),Digits);
//-----
  int Orders = OrdersTotal();
  for (int i=0; i<Orders; i++)
  {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol()) continue;
    {
      if(OrderType() == OP_BUY && OrderMagicNumber()==Magic && OrderStopLoss() != BuySL-Spread*Point
      && BuySL-Spread*Point > OrderStopLoss() && BuySL-Spread*Point > OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),BuySL-Spread*Point,OrderTakeProfit(),0,CLR_NONE);
      }
      if(OrderType() == OP_SELL && OrderMagicNumber()==Magic && OrderStopLoss() != SelSL+Spread*Point
      && SelSL+Spread*Point < OrderStopLoss() && SelSL+Spread*Point < OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),SelSL+Spread*Point,OrderTakeProfit(),0,CLR_NONE);
      }
    }
  }
}

 
Roger:
price_open !!!!- この価格は使えませんインジケータにしか使えません。BidまたはAskを使用します。

ありがとうございます!!! ええ、その可能性は十分にありますね。
 

みんな、もっと複雑な質問なんだけど......。

EAで所定の利益に達したときにすべての注文を閉じるようにするには・・・。1つのシンボルに対してのみクローズ注文を行う ...

例:EAは1つのシンボル100pのすべての注文を閉じるために3ペアの金額で動作します...

EURが 100p以上ある場合、EURの注文だけをクローズし、他の注文は200pになるかもしれません ...

もし私が accountbalanse() を取ったら、アドバイザーは3つのペアの合計が100p以上になったときだけ閉じます。このオプションは私に合わない!

助けてください............。