どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 915

 

問題は、これらのチケットが1つ以上あるということです。でも、解決しました、ありがとうございます。 他で自分を責めています。evilliveAlexeyVik さん、早速のご回答ありがとうございます。

[Deleted]  
こんにちは!戦略テスターで 取引を開かない理由を書いてください、ログエラーに書き込みます:(2015.07.13 00:22:39.218 TestGenerator:不一致データエラー(2013.07.11 05時00分の高い値1.31150は最低タイムフレームから到達されていない、高い価格1.31140不一致)の引用符は、更新されました。Expert Advisorのコードはこちらです。
int ticket;
int init;

int start()
{

int bars0;
int bars1;
int bars2;
int bars3;
int   stoploss=50; 
int   takeprofit=30;
int       slipage=2;

//-------------------------------------------------------------------+
  
  if ( OrdersTotal()<1 &&  Open[bars0]<Close[bars0] && Open[bars1]<Close[bars1] )
      if (  Open[bars2]>Close[bars2]&& Open[bars3]>Close[bars3] )
      if(V1()==true) 
     
       ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,slipage,Ask-stoploss*Point,Ask+takeprofit*Point,"",123,0,Red);
     
//-------------------------------------------------------------------+ 
    if ( OrdersTotal()<1 &&  Open[bars0]>Close[bars0] && Open[bars1]>Close[bars1]&& Open[bars2]<Close[bars2])
     if (  Open[bars2]<Close[bars2]&& Open[bars3]<Close[bars3] )
      if(V2()==true) 
     
       ticket = OrderSend(Symbol(),OP_SELL,0.1,Bid,slipage,Bid+stoploss*Point,Bid-takeprofit*Point,"",123,0,Red);
      
    
         
//-------------------------------------------------------------------+                    
 return;}
//+------------------------------------------------------------------+
bool V1( ){
  int      i, k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
     if (OrderType()==OP_BUY) {
      return(false);
   }
  }    
 }
 return(true); 
}

bool V2( ){
  int      i, k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
     if(OrderType()==OP_SELL) {
      return(false);
   }
  }
 }
 return(true); 
}

)
 
rylay:
こんにちは! 戦略テスターで取引を開かない理由を書いてください、ログエラーに書き込みます:(2015.07.13 00:22:39.218 TestGenerator:不一致データエラー(2013.07.11 05時00分の高い値1.31150は最低タイムフレームから到達されていない、高値1.31140不一致)の引用符は、更新されました。Expert Advisorのコードはこちらです。
)

テスターのエラーについてですが、ティックでのテストでは必ず発生します。MT4の気配値履歴は完璧ではなく、常にミスマッチがあります。

コードに誤りが多い。変数が初期化されていない、開始関数が何を返すか理解していない、取引関数の実行チェックがない、などの問題がありますので、修正をお願いします。

コードの先頭に#property strictを追加します。

また、注文の種類を定義する関数を2つ作ったので、それぞれの種類の注文のカウンターを統合して、if( OrdersTotal()<1...) の比較ではなく、if( OrdersBuy<1...), if( OrdersSell<1...) と書いてはいかがでしょうか。その方が正しいでしょう。

 

1つのバーの中で取引が行われ、終了時に同じバーですぐにオープンのシグナルが表示される場合、1つのバーの条件下で1つの取引のみを行う方法を教えてください。

言い換えれば、バーが注文を出す合図を出したということです。開いて、ショートテイクが発動した。取引は終了していますが、EAは1つ目を閉じて、すぐに2つ目を全く同じ注文で開きます。なぜなら、同じバー内で開くという条件がまだあるからです。1つのバーで1つだけポジションを持つ必要があります。そして、次の取引を開始するには、別のバーの開始を待つ必要があります。

 
Poinson:

1つのバーの中で取引が行われ、終了時に同じバーですぐにオープンのシグナルが表示される場合、1つのバーの条件下で1つの取引のみを行う方法を教えてください。

言い換えれば、バーが注文を出す合図を出したということです。開いて、ショートテイクが発動した。取引は終了していますが、EAは1つ目を閉じて、すぐに2つ目を全く同じ注文で開きます。なぜなら、同じバー内で開くという条件がまだあるからです。1つのバーで1つだけポジションを持つ必要があります。そして、次の取引を開始するために、別のバーの開始を待ちます。

すでに開いている=falseとする。

if (isNewBar()){ _already opened = false;}。

if (!OrderSend(...) ){ /* エラー処理 */; }else { _already opened = true; }.

isNewBar() - 標準、記事にあるように、静的なdatetime date = Time[0]を使用。

if (_already opened) { return; //令状を送らない }.

[Deleted]  
evillive:

言及されたテスターのエラーについてですが、ティックでのテストでは必ず発生します。MT4のクォート履歴は不完全で、常にミスマッチが発生します。

コードに誤りが多い。変数が初期化されていない、開始関数が何を返すか理解していない、取引関数の実行チェックがない、などの問題がありますので、修正をお願いします。

コードの先頭に#property strictを 追加します。

また、注文の種類を定義する関数を2つ作ったので、それぞれの種類の注文のカウンターを統合して、if( OrdersTotal()<1...) の比較ではなく、if( OrdersBuy<1...), if( OrdersSell<1...) と書いてはいかがでしょうか。その方が正しいでしょう。

ありがとうございます。訂正させていただきます。ただ、1つ条件があったときです。
if ( OrdersTotal()<1 &&  Open[bars0]<Close[bars0]
   ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,slipage,Ask-stoploss*Point,Ask+takeprofit*Point,"",123,0,Red);
がうまく機能しないので、問い合わせたんです。
 
danik:

bool _already opened = false;

if (isNewBar()){ _already opened = false;}。

if (!OrderSend(...)){ /* エラー処理 */; }else { _already opened = true; }.

isNewBar() - 標準、記事にあるように、静的なdatetime date = Time[0]を使用。

if (_already opened) { return; //令状を送らない }.

isNewBar' -function not defined 2015 と表示される。

私は本当は魔法使いじゃないんです。できれば正確なコピー&ペーストをお願いします。

 
Poinson:

isNewBar' - function not defined 2015 と表示される。

私は、あまり職人気質ではないんです。できれば正確なコピー&ペーストをお願いしたいです。

新しいバーであれば、isNewBar()という関数をコピー&ペーストすれば、多分うまくいくでしょう。複雑なものではありません。新しいバーの開始時間(インデックス0、つまり最後のもの)を比較し、それが以前より多ければ、新しいバーが出現したことを示し、出現していれば、他の条件があれば新しい取引を開始できることを示しています
 
Poinson:

isNewBar' - function not defined 2015 と表示される。

私は、あまり職人気質ではないんです。できれば正確なコピー&ペーストをお願いしたいです。

コドベースのどのアドバイザーでも、それを見つけることができます。

//в старте перед условиями входа:
      if(NewBar() == true)
      { 
//----------------------
  return(0);
}
// и вне старта:
//----------------------------//  NewBar  \\----------------------------\\
bool NewBar() 
{
  static datetime lastbar = 0;
  datetime curbar = iTime(NULL,15,0);
  if(lastbar != curbar) 
  {
    lastbar = curbar;
    return(true);
  }
  else return(false);
} 
 
borilunad:

コドバセの参議院議員なら誰でも見つけることができたはずです

ありがとうございます ))シンプルに最強!1回目から全部動きました。

皆さん、ありがとうございました。