エラーに悩まされ、取引業務がない - ページ 6

 

この問題は、さらに興味深い。上の投稿のコードを元に、簡単なEAを作りました。また、5つの取引を開始し、それぞれ5分間市場に存在し、その後終了します。以下はそのコードです。

#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   static int test_ticket[2]={0,0};
   if(test_ticket[1]<5 && test_ticket[0]==0) {
      test_ticket[0]=OrderSend(_Symbol,OP_BUY,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN),NormalizeDouble(Ask,_Digits),30,0.0,0.0,"test",33333,0,clrNONE);
      if(test_ticket[0]>0) test_ticket[1]++;
   }   
   if(OrderSelect(test_ticket[0],SELECT_BY_TICKET))
      if(OrderCloseTime()==0 && OrderOpenTime()+300<TimeCurrent())
         if(OrderClose(test_ticket[0],OrderLots(),NormalizeDouble(Bid,_Digits),30,clrNONE)) {
            printf("Test order closed, ticket #%d",test_ticket[0]);
            test_ticket[0]=0;
         }   
   
  }
//+------------------------------------------------------------------+

1回目で検証を通過しましたが、NZDUSDのトレードは ありません。なぜ?


バリデーターが最小ロットでの開設に不足する預託金を設定しても、上記メッセージのようにエラー134が表示されます。ただ、トレードがないんですよねー。なぜ?

バリデーターが故障しているのか、それとも合理的な理由があるのでしょうか?

 
Renat Akhtyamov:

で、バリデータの全レスポンスをまずここに置くわけです。

また、バリデーターがあなたの考え出した原則に従ってチケットを割り当てていると考えるのはなぜでしょうか?

5つのトレードを開くには、チケットに煩わされることなく、オープントレードの数を数える必要があります。

レナート 取引はそういうものだと思います、よく見てください。テスターで私のコードを実行することもできます。test_ticket[0]はチケットの順番、test_ticket[1]は試行回数を格納する配列です。

最初の条件の試行回数を変更することで、異なるディール数を 開くことができます。

if(test_ticket[1]<5 && test_ticket[0]==0) {
 

これは、注文数の 異なる以下の試みについての話である。


そしてここで、次の試行の一つで、バリデータは実際に最小ロットを使用しており、故意に1ドルの預金で開くことができません。問題は、なぜさっきの試みにトレードがなかったのか、ということだ。また、なぜこのランでは、検証エラーを引き起こす、故意に間違った最小ロットと保証金を使用しているのでしょうか?

Vladimir Karputov:

...

全体として、バリデーターは今のところ、その主な仕事である、マーケットから不完全なコードを選別することに対処しています。

うーん...

しかも、適当に撮ったものではありません。次の3つの試みを紹介します。


 

ログにある「No money to open such and-such transaction...」というエラーは、取引注文を 出したものの、事前に何も(あるいは何も)完全にチェックしていなかったということです。記事では、チェックのための明確なアルゴリズムが示されています。


覚えておいてください - エラー "このような、このような取引を開くためにお金がありません..."。- は、Expert Advisorのロジックに99%の誤差があります。チェックが抜けている(あるいは完全に抜けている)。これは、コーディングの原則を十分に理解していないことの表れです。


覚えておいてください:現実の世界では、保証金は1ドルかもしれないし、レバレッジは常に1:100とは限らないし、最小ロットは0.01や0.02や0.30や1.0、その他いろいろあるのです......。

 
Vladimir Karputov:

ログにある「No money to open such and-such transaction...」というエラーは、取引注文を 出したものの、事前に何も(あるいは何も)完全にチェックしていなかったということです。記事では、チェックのための明確なアルゴリズムが示されています。


覚えておいてください - エラー "このような、このような取引を開くためにお金がありません..."。- は、Expert Advisorのロジックに99%の誤差があります。チェックが抜けている(あるいは完全に抜けている)。これは、コーディングの原則を十分に理解していないことの表れです。


覚えておいてください:現実の世界では、保証金は1ドルかもしれないし、レバレッジは常に1:100とは限らないし、最小ロットは0.01や0.02や0.30や1.0、その他いろいろあるのです......。

ウラジミール、象を見落としたぞ。主なミスは

あなたの言葉で答えられるし、レクチャーもできる。

 
Vladimir Karputov:

ログにある「No money to open such and-such transaction...」というエラーは、取引注文を 出したものの、事前に何も(あるいは何も)完全にチェックしていなかったということです。記事では、チェックのための明確なアルゴリズムが示されています。


覚えておいてください。「こんなトレードをするための資金はない...」というエラーです。- は、Expert Advisorのロジックに99%の誤差があります。チェックが抜けている(あるいは完全に抜けている)。これは、コーディングの原則を十分に理解していないことの表れです。


覚えておいてください:現実の世界では、保証金は1ドルかもしれないし、レバレッジは常に1:100とは限らないし、最小ロットは0.01や0.02や0.30や1.0、その他いろいろあるのです......。

ウラジミールさん、投稿全般を読んでいるのか、面白い写真だけを選んでいるのか、よくわからないんです。少なくともページの最初からもう一度、または2、3回、すべてをよく 読んでください。そして、コードを読め!わざわざ説明するまでもないでしょう!?

 
Andrey Kaunov:

わざわざ説明するほどのことでもないでしょう!?

アンドリュー 誰も、すでに書かれ、咀嚼されたものを繰り返したくはないのです。

 
はい、でも問題は明白です。もしかしたら、この強力なサイトの誰かが解析して、バリデーターを確認してみるかもしれませんね。NZDUSDとGBPUSDのチェックでは、パラメータなしのシンプルな透過コードでは取引が成立しないことがあります。また、何らかの条件を追加して、金についても取引が行われないようにすると、再び取引操作なし、 チェック漏れというエラーが発生します。
 
Andrey Kaunov:
はい、でも問題はそこです。もしかしたら、この強豪サイトの誰かが、同じように理解しようとして、バリデーターを確認するかもしれません。NZDUSDとGBPUSDのチェックでは、パラメータなしのシンプルな透過型コードは全く動作しないことがあります。また、何らかの条件を追加して、金についても取引が行われないようにすると、再び取引操作なし、 チェック漏れというエラーが発生します。

バリデータが貿易サーバーのエラー一覧からエラーコードを返すことに依存しないでください。エラーメッセージは 必ず自分で記録してください。注文を実行できないこと、この場合どうすればよいかを知っている記事に書かれていることをよく読んでください。

ロットサイズの計算など、ログにエラーメッセージがないことがバリデーションエラーの原因である可能性は十分にあります。

 
Andrey Kaunov:

これは、注文数の 異なる以下の試みについての話である。


そしてここで、次の試行の一つで、バリデータは実際に最小ロットを使用しており、故意に1ドルの預金で開くことができません。問題は、なぜさっきの試みにトレードがなかったのか、ということだ。また、なぜこのランでは、検証エラーを引き起こす、故意に間違った最小ロットと保証金を使用しているのでしょうか?

うーん...。

しかも、適当に撮ったものではありません。次の3つの試みを紹介します。


取引注文の送信エラー 134 ...

このエラーはテスターが書いたのでしょうか?もしそうなら、それはバリデーションエラーの原因の一つでもあります。自分でポジションを開く可能性を計算し、それが不可能な場合は、端末とサーバーにすべてを任せて、故意に間違った注文をサーバーに送るのではなく、設定したパラメーターで取引できないことをジャーナルに自分でメッセージとして書き込む必要があります。このような間違った注文をすると、サーバーに殺到し、その後、安全に自動売買を禁止されることがあります。これはあなたの責任であり、バリデーターの責任ではありません。