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

 

よっしゃーーーーーーーーーーーーーーーーーーーー希望する注文がない場合、Xは希望するマジックナンバーとゼロのままとなり、注文が開始されます。ある場合、Xは2になり、それ以上の注文は出ません。

では、他に何が問題なのでしょうか?

- 最初の瞬間は、OrderSelect関数を使って 存在しないオーダーを選択します。

最初のループで for(int Uy=OrdersTotal();Uy<=-1;Uy--)だから何、まあサイクルは希望のためにもっと実行されます、それから私はそれを0に変更しました、仕事に変化はありません、これらはすべてエラーではありません、彼らは変わりません、私は謝罪します。

 
サイクルの作業を追跡するためのアラートを挿入。何もわからないんです。ループの中にある変数が、一度だけ、最初に、値が0になり、その後、売りストップ0、買いストップ130、これも驚きですが、左右対称になっているのです!!!!と碑文の2.5メートル後にすでにエラー148(ブローカーは、多くの注文を禁止している)と述べている。
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X;       
//----
       for(int Uy=OrdersTotal();Uy==0;Uy--){
OrderSelect( Uy,SELECT_BY_POS );Alert ("Uy",Uy);
if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000||OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol())
{X ++;}}  
if (X<=2){
   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, PRICE_OPEN+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

ああ、なんという戯言だろう。 そして、最初は毎回、49回くらい日付がおかしくなる。 やったー!!!! Xは常に0のままで、問題なく書き込めます。2オーダーで。

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

よっしゃーーーーーーーーーーーーーーーーーーーー希望する注文がない場合、Xは希望するマジックナンバーとゼロのままとなり、注文が開始されます。ある場合、Xは2になり、それ以上の注文は出ません。

では、他に何が問題なのでしょうか?

- 最初の瞬間は、OrderSelect関数を使って存在しないオーダーを選択します。

最初のループで for(int Uy=OrdersTotal();Uy<=-1;Uy--)だから何、ループは希望のためにもっと実行さ れ、その後、0に変更した、仕事に変化はありません、これらはエラーではありません、彼らは変わりません、申し訳ございません。

よりも長く 動作するのはなぜですか?

いくら注文が開いていても、すぐに注文数が 0以上になるため、Uy<=-1という 条件がすぐに満たさ れない

 

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

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

void TrailPositions()
{
//-----
  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*Point
      && BuySL*Point > OrderStopLoss())// && BuySL*Point > OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),BuySL*Point,OrderTakeProfit(),0,CLR_NONE);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }
      }
      if(OrderType() == OP_SELL && OrderMagicNumber()==Magic && OrderStopLoss() != SelSL*Point
      && SelSL*Point < OrderStopLoss())// && SelSL*Point < OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),SelSL*Point,OrderTakeProfit(),0,CLR_NONE);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }
      }
    }
  }
}

 
PapaYozh:


ティックが動いていて、EAのアイコンが「笑顔」であれば、EAは取引をするはず(=そのための条件が現れる)ですが、取引が行われない場合は、デバッグが必要です。

EAのコードの中で、特に比較される場所のprice() コマンドを整理して、具体的に何が比較されているのかを確認します。おそらく、double 型の変数の等価性を比較する場合、変数が等しいと仮定しながら、比較結果が常に偽になることがあると思います。

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

2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15:オープン #30906670 セル 0.01 CLM1 at 99.79 ok
2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: OrderModify 関数の無効なチケットです。
2011.05.19 09:55:40 Spacenewcomer-Svecha ESM1,M5:オープン#30906787買い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,「基本」,_MagicNumber,0,赤)。


OrderModify(OrderTicket(),OrderOpenPrice(),Ask+StopLoss*Point,Ask-TakeProfit*Point,0,Red)を実行。
return(0)です。

}

しかも、Expert Advisorの起動後、最初に修正される命令なんです!

当然、コードの順番の修正も間違っているのですが...。アドバイスお願いします

 
ということで、どなたかZZの最後の2つの極値を表示する関数を教えてくださいませんか?
 
親愛なるプログラマーの皆様、Expert Advisorを改善する方法についてご提案をお願いします:オープンポジションが あり、しばらくすると同じ方向に再オープンシグナルがあります。最初の注文がすでに利益が出ている場合のみ、2つ目のシグナルを満たしたいのです。残高サイズと自己資本を比較することで実装しました(自己資本が残高より大きければ、開いた注文はプラスになります)。
最後に持っているオープンオーダーの利益/損失を決定するためのコードを提案してもらえますか?
 
最も信頼性の高いpipsで測定します。
 
Roger:
最も信頼性の高いpipsで測定します。
コードを教えてください。