自動売買選手権2007:エキスパートにありがちなミス - ページ 6

 
エラーメッセージ"OrderModify error 1" は、不正確なプログラミングのために、OrderModify が変更されていないパラメータで呼び出されたことを意味します。

OrderModify を呼び出す前に、新しいデータで更新を呼び出しているのか、それとも既存の値を設定しようとしているのかを確認してください。
 
あなたの専門家のテストが終了しました。専門家によるテストレポート。
-----------------------
2007.09.08 17:47
EURUSDの場合:60
17:38:34 2007.01.04 00:01 stalker_2 EURUSD,H4:OrderModify error 1
17:38:34 2007.01.04 00:02 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:03 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:04 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:04 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:08 stalker_2 EURUSD,H4: OrderModify error 1
0分49秒
エラー数:20


-----------------------

Expert Advisorのコードを修正し、新しいバージョンをプロフィールページにアップロードしてください。

あなたのロボットがおかしくなってしまったのでしょう、たくさんの参加者がいるようです :-) すでにExpert Advisorが混ざってしまっています。コメントに「stalker_2」と書かず、1時間足チャートで動作するExpert Advisorがあるのですが、これはどうなのでしょうか?また、OrderModifyコマンドは全く使用しません。
 
Renat:
エラーメッセージ "OrderModify error 1 "は、不正確なプログラミングによる、変更されていないパラメータでOrderModifyを呼び出すことを意味します。 OrderModifyを呼び出す前に、新しいデータで更新を呼び出しているのか、すでに存在する値を設定しようとしているのか確認してください。


もしかして、建築のこと?

if ( RefreshRates() == true )

{

....

OrderModify(Ticket,...)

}

しらみつぶしに

ループ内で注文が変更されるたびにResresh()する

35pipsの利益を得た後のブレークイーブン

外部変数、最小値

FirstTralStopSell = 35;

50pips到達後のトロール

なぜこのようなエラーが発生するのか、よくわかりません。

OrderModifyコマンドを発行した後、テストシステムは価格が50pips以上戻るような方法でリクオートを エミュレートしている可能性があります。

が、では、どうすればそのような事態を避けられるのか?

しかも、私のログは、テストシステムから出力されるログファイルに表示されないのです。

if (err != 0 )
{
if ( ECHOerror == 1 )
Print("Error("+err+") Open="+OrderOpenPrice()+""+OrderStopLoss()+" modifying SL.OrderStopLoss()+" )"+(Ask+Point*FirstTralStopSell)+" TP "+(0)+""+msgErrors(err));
}

void TralYZ(int lLockTralSell, int lLockTralBuy)
{
   int err;
   int cnt=OrdersTotal();
   int LocalDinamicTrallSELL;
   int LocalDinamicTrallBUY;
   int FirstTralStopSell;
   int FirstTralStopBuy;
   LocalDinamicTrallSELL = oDinamicTrallSELL ; // значения по умолчанию 
   LocalDinamicTrallBUY =  oDinamicTrallBUY  ;
   FirstTralStopSell = oFirstTralStopSell;             // первый безуюыток 
   FirstTralStopBuy = oFirstTralStopBuy;
 
 
   while(cnt>=0)
   {
      RefreshRates();
      
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      Sleep(10000);
      int Ticket=OrderTicket();
      int IDorder;
      IDorder = FindID(Ticket);
      if (OrderSymbol() == Symbol() )
      {
         if (OrderType()==OP_SELL && lLockTralSell == 0 ) 
         {         
            if ( OrderMagicNumber() == MAGIC3 )
               FirstTralStopSell = d3FirstTralStopBuy;
            if ( OrderMagicNumber() == MAGIC2 )
               FirstTralStopSell = d2FirstTralStopBuy;
            if ( OrderMagicNumber() == MAGIC1 )
               FirstTralStopSell = d1FirstTralStopBuy;
            if ( OrderMagicNumber() == cMAGIC3 )
               FirstTralStopSell = c3FirstTralStopSell;
            if ( OrderMagicNumber() == cMAGIC2 )
               FirstTralStopSell = c2FirstTralStopSell;
            if ( OrderMagicNumber() == cMAGIC1 )
               FirstTralStopSell = c1FirstTralStopSell;
            if ( 
               ( OrderStopLoss() == 0  && ( OrderOpenPrice()-Ask )>=(FirstTralStopSell*Point) + Ask-Bid ) ||
               ( OrderStopLoss() > OrderOpenPrice()  && ( OrderOpenPrice()-Ask )>=(FirstTralStopSell*Point) + Ask-Bid ) 
               )
            {                  
               if ( DEBUG == 1 )
                  Print( "1 SL="+OrderStopLoss()+" > OP="+OrderOpenPrice() +" && ( OP"+OrderOpenPrice()+" - Ask"+Ask+") "+( OrderOpenPrice()-Ask ) +" >= ( "+FirstTralStopSell+" *  "+Point+")  "+Ask+" - "+Bid+" ="+(Ask-Bid));
               lotlib_PrevLots = OrderLots();  
               lotlib_PrevProfit = OrderProfit();
               OrderModify(Ticket,OrderOpenPrice(),Ask+(Point*FirstTralStopSell) , 0 ,0,Purple);
               Sleep( 10000 );
               err=GetLastError();
               if (err != 0 )
               {
                  if ( ECHOerror == 1 )
                     Print("Error("+err+") Open="+OrderOpenPrice()+" "+OrderStopLoss()+" modifying SL: "+(Ask+Point*FirstTralStopSell)+" TP "+(0)+" "+msgErrors(err));
               }
            }
 
同じExpertコードを3回チェックしましたが、最初の2回はエラーがなく、3回目に突然エラーが発生し、Expertコードを変更しなければならなくなりました。
 
Renat:
エラーメッセージ"OrderModify error 1 "は、OrderModifyが未変更のパラメータで呼び出されたことを意味し、これは不正確なプログラミングに起因します。

OrderModify を呼び出す前に、新しいデータで更新を呼び出しているのか、それとも既存の値を設定しようとしているのかを確認してください。


構成要素を紹介した後

                     if ( RefreshRates() == true )
                        OrderModify(Ticket,OrderOpenPrice(),Bid-Point*LocalDinamicTrallBUY , 0,0,Purple);

ターミナルバージョン208は、テストでは全く動作しません。

RefreshRates() == true ?

LocalDinamicTrallBUY = 50;

入門

              if ( OrderStopLoss() > OrderOpenPrice() && ( Bid - OrderStopLoss() )  >= (LocalDinamicTrallBUY*Point) + Ask-Bid )
                  {
                     lotlib_PrevLots = OrderLots();  
                     lotlib_PrevProfit = OrderProfit();
                     if ( RefreshRates() == true )
                        OrderModify(Ticket,OrderOpenPrice(),Bid-Point*LocalDinamicTrallBUY , 0,0,Purple);

微妙なところでしょうね...についてはわかりません。

 
YuraZ:
レナート
エラーメッセージ "OrderModify error 1 "は、OrderModifyが不正確なプログラミングのために、変更されていないパラメータで呼び出されたことを意味します。

OrderModify を呼び出す前に、新しいデータで更新を呼び出しているのか、それとも既存の値を設定しようとしているのかを確認してください。

もしかして、建築のこと?


これは、OrderModifyにすでにあったのと同じStopLossの値を設定しようとしていることを意味します。例えば、StopLossが1.3020で、再度1.3020に設定しようとした場合、OrderModifyはコード1を返します。これは、OrderModifyのドキュメントに 明示されています。

bool OrderModify() int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
以前にオープンしたポジションまたは保留中の注文のパラメータを変更します。 関数が正常に完了した場合は TRUE を返します。 関数が失敗した場合は FALSE を返します。 エラー情報を取得するにはGetLastError() を呼び出す必要があります。

注:建値と有効期限は、保留中の注文にのみ変更可能です。
変更されていない値が関数へのパラメータとして渡された場合、エラー 1(ERR_NO_RESULT)が発生する。
一部の取引サーバーでは、保留中の注文の有効期限を設定することがあります。この場合、expiration パラメータに0以外の値を設定しようとすると、エラー 147 (ERR_TRADE_EXPIRATION_DENIED) が発生する。
 
Renat:
YuraZ:
レナート
エラーメッセージ "OrderModify error 1 "は、OrderModifyが変更されていないパラメータで呼び出されたことを意味し、これは不正確なプログラミングに起因するものである。

OrderModify を呼び出す前に、新しいデータで更新を呼び出しているか、すでに存在する値を設定しようとしているかどうかを確認します。

もしかして、建築のこと?


つまり、OrderModifyに既にあるStopLossの値と同じものを設定しようとしているのです。例えば、StopLossが1.3020で、再度1.3020に設定しようとした場合、OrderModifyはコード1を返します。これは、OrderModifyのドキュメントに 明示されています。

bool OrderModify() int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
既にオープンしているポジションや未決済の注文のパラメータを変更します。 この関数が正常に終了した場合は、TRUE を返します。関数が失敗した場合は FALSE を返します。GetLastError()を呼び出し、エラーに関する情報を取得する。

注:建値と有効期限は、保留中の注文にのみ変更可能です。
変更されていない値が関数へのパラメータとして渡された場合、エラー 1(ERR_NO_RESULT)が発生する。
一部の取引サーバーでは、保留中の注文の有効期限を設定することがあります。この場合、expiration パラメータに0以外の値を設定しようとすると、エラー 147 (ERR_TRADE_EXPIRATION_DENIED) が発生する。


Renat ありがとうございます。

トロールの入力条件を追加しました。

&& OrderStopLoss() != Ask+Point*LocalDinamicTrallSELL

if ( 
                         OrderStopLoss()  < OrderOpenPrice()
                      && ( OrderStopLoss()-Ask )>=(LocalDinamicTrallSELL*Point) + Ask-Bid   
                      && OrderStopLoss() !=  Ask+Point*LocalDinamicTrallSELL    
                       ) 
                  {                     
                     if ( DEBUG == 1 )
                        Print( "2 SL="+OrderStopLoss()+" < OP="+OrderOpenPrice() +" && ( OP"+OrderOpenPrice()+" - Ask"+Ask+") "+( OrderOpenPrice()-Ask ) +" >= ( "+LocalDinamicTrallSELL+" *  "+Point+")  "+Ask+" - "+Bid+" ="+(Ask-Bid));
                     lotlib_PrevLots = OrderLots();  
                     lotlib_PrevProfit = OrderProfit();
                     if ( RefreshRates() == true )
                        OrderModify(Ticket,OrderOpenPrice(),Ask+Point*LocalDinamicTrallSELL , 0,0,Purple);
                     err=GetLastError();
                     if (err != 0 )
                     {   
                        if ( ECHOerror == 1 )
                           Print("Error("+err+") Open="+OrderOpenPrice()+" "+OrderStopLoss()+" modifying SL: "+(Ask+Point*LocalDinamicTrallSELL)+" TP "+(0)+" "+msgErrors(err));
                     }
                  }

しかし、テスト中のログにはエラーはありませんでした- キモチワルイ

 
pilgrim:

あなたのロボットは狂ってしまったのだと思います、多くの参加者がいると思います :-) すでにEAを混乱させ始めているのです。私のEAはコメントに「stalker_2」と書かず、1時間足チャートで動作しています。また、OrderModify コマンドは全く使用しません。
自動テスト者のスクリプトが他人のログを取り込んでしまった - は既に修正されています。
 
つまり、2回ほどテストに合格し、登録されたとのメールが来たのですが...。と表示され、3回目には「コードにエラーが あります」と表示されました...。なぜ、一度プロファイルにアップロードしたエキスパートのコードを変更しなければならないのでしょうか?
 
folver:
つまり、2回、指数関数がテストに合格し、登録されたとの電子メールを受け取りました。3回目にはコードにエラーがあると表示されます。プロファイルにアップロードしたExpert Advisorのコードを変更する必要があるのでしょうか?
結果から判断すると、Expert Advisorはマージンコールをキャッチしています。まだ何も言えません。明日の朝には次のチェックが完了し、結果を確認する予定です。