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);
}
問題は、これらのチケットが1つ以上あるということです。でも、解決しました、ありがとうございます。 他で自分を責めています。evilliveAlexeyVik さん、早速のご回答ありがとうございます。
)
こんにちは! 戦略テスターで取引を開かない理由を書いてください、ログエラーに書き込みます:(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つだけポジションを持つ必要があります。そして、次の取引を開始するには、別のバーの開始を待つ必要があります。
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; //令状を送らない }.
言及されたテスターのエラーについてですが、ティックでのテストでは必ず発生します。MT4のクォート履歴は不完全で、常にミスマッチが発生します。
コードに誤りが多い。変数が初期化されていない、開始関数が何を返すか理解していない、取引関数の実行チェックがない、などの問題がありますので、修正をお願いします。
コードの先頭に#property strictを 追加します。
また、注文の種類を定義する関数を2つ作ったので、それぞれの種類の注文のカウンターを統合して、if( OrdersTotal()<1...) の比較ではなく、if( OrdersBuy<1...), if( OrdersSell<1...) と書いてはいかがでしょうか。その方が正しいでしょう。
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 と表示される。
私は本当は魔法使いじゃないんです。できれば正確なコピー&ペーストをお願いします。
isNewBar' - function not defined 2015 と表示される。
私は、あまり職人気質ではないんです。できれば正確なコピー&ペーストをお願いしたいです。
isNewBar' - function not defined 2015 と表示される。
私は、あまり職人気質ではないんです。できれば正確なコピー&ペーストをお願いしたいです。
コドベースのどのアドバイザーでも、それを見つけることができます。
コドバセの参議院議員なら誰でも見つけることができたはずです
ありがとうございます ))シンプルに最強!1回目から全部動きました。
皆さん、ありがとうございました。