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

 
Dimka-novitsek:
EAが何も起動しないときは、新規注文がティックごとに開かないかどうかを確認するためだけです。
OrderSelect( tiket,SELECT_BY_TICKET, MODE_TRADES );
if(OrderSymbol()==Symbol())
{
   if (OrderMagicNumber( )==1000||OrderMagicNumber( )==2000 )
   {
      i=OrdersTotal() ;
      if (i<2)
      {
         tiket= OrderSend( Symbol(), OP_BUYSTOP, volume*A, price +otstup*Point, Point* 3, R1, PRICE_OPEN+takeprofit*Point+otstup, "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, "OP_SELLSTOP", 2000, expiration,C'0,128,255' );
         Alert ("OP_SELLSTOP", GetLastError( ));
         i=OrdersTotal();
      }
   }
}

これはあなたのコードで、私は何の変更も加えていません。

ティケット注文とマジックシンボルを選択し、注文数の合計が 2以下であれば注文されると書かれていますね。

 
ありがとうございます!!!すみません、確かにナンセンスなことを書いてしまいました。
 
drknn:


コードがないと何とも言えません。EAは4桁で書かれているのに、デモ口座は5桁ということも十分あり得ます。例えば10pipsの損切り注文を設定した場合、5桁のEAでは1pips、4桁のEAでは1pipsと同じ距離になることはご理解いただけたと思います。逆指値注文の最小許容距離を例えば3ポイントとすると、5桁の相場では3ポイントではなく30ポイントになります。5桁で10ポイントの逆指値注文を設定するコマンドを、サーバーは当然のことながら拒否します。

でも、その理由は違うかもしれません。ほら、「なぜ車が動かないのか」と人に聞いたことがあるでしょ。ボンネットを開けて、エンジンをかけようとしたときの車の反応を聞いてみないと理由はわからない...。

EURUSDでストラテジーテスターを起動し、EURUSD、GBPUSD、USDJPYと複数の通貨で実行しようとしましたが、うまくいきません。Buy/Sell注文を 送信するときにPointを使用したので、すべてのシンボルで動作するはずです。一番理解できないのは、テスターでは結果が出るのに、EAではデモ口座でポジションが開けないことです。どのような場合に起こりうるのでしょうか?

とにかく返信ありがとうございます!夕方にはコードを投稿します。

 
Dimka-novitsek:


すみません、ここでくだらないことを書いてしまいましたが、どこが完全に羊なのか、教えていただけませんか? 。

全部: ))))))))))))))))))))))))))))))))))))))))))))))))))))))

最初からやりましょう。

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int      tiket, tikett;
int      i=0, R1=0, R2=0, A=1;
double   volume=0.1;
double   price=PRICE_OPEN;
// R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;

int start()
{
//----

   OrderSelect (tiket, SELECT_BY_TICKET, MODE_TRADES);
   if(OrderSymbol()==Symbol()) {
      if (OrderMagicNumber()==1000 || OrderMagicNumber()==2000) {
         i=OrdersTotal();
         if (i<2) {
            tiket=OrderSend(Symbol(), OP_BUYSTOP, volume*A, price+otstup*Point, Point*3, R1, PRICE_OPEN+takeprofit*Point+otstup, "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, "OP_SELLSTOP", 2000, expiration,C'0,128,255' );
            Alert ("OP_SELLSTOP", GetLastError( ));
            i=OrdersTotal();
            }
         }
      }

//----
return(0);
}
//+------------------------------------------------------------------+

初期状態では、2つの変数がゼロで初期化されています。

int      tiket, tikett;

であれば、最初の行は、チケットの注文を選択するところです。

OrderSelect (tiket, SELECT_BY_TICKET, MODE_TRADES);

ここで、変数ticketは0である。つまり、チケットが0枚の注文を選択しようとする。その際、チケットで選択する場合はpoolパラメータは無視され、MODE_TRADESを指定したままなので、ヘルプも読んでいない状態です。これはエラーではなく、この場合、単に無視される余分なパラメータです。従って、チケットが0枚の注文は選択されない、つまり存在しない...。

さらに、すべてがネストされた条件の中に入っていく。最初の条件は

if(OrderSymbol()==Symbol())

...選択された注文のシンボルが現在のチャートのシンボルと一致する場合...また、順番が決まっていないので、何もしなくても安全にstart()の出口にたどり着きます。

断言できるのは...さらにその先には、面白みに欠けるが......。つっこみどころ満載でおもしろくない。

まずは、すでにオープンしているポジションや設定されている未決済注文を 検索することから始めましょう。

頑張ってください。

 
ilunga:

これはあなたのコードで、私は何も変更していません。

与えられたシンボルと与えられたマジックオーダーのティケットオーダーを選択し、合計で2つ以下のオーダーがある場合にオーダーが行われると書かれていますね。


あ、いや、その通り、2つ以下の注文を開始すると、保留中の注文が2つ出て、次のティックでは2つあって何も起きないんです。

私は頭の中で何か危機感を抱いているのでしょう。

 
Dimka-novitsek:


あ、いや、その通り、2つ以下の注文を開始すると、保留中の注文が2つになり、次のティックでは2つになって何も起きないんです。

私は頭の中で何か危機感を抱いているのでしょう。

もう、危機感を持ったところをステップバイステップでお伝えしているのですが...。
 
Sersad:

EURUSDでストラテジーテスターを実行し、EURUSD、GBPUSD、USDJPYの複数の通貨で実行を試みましたが、どこにもうまくいきません。Pointは売買注文を出すときに使っていたので、すべてのシンボルで使えるはずです。一番理解できないのは、テスターでは結果が出るのに、EAがデモ口座でポジションを開けないことです。どのような場合に起こりうるのでしょうか?

とにかく、回答ありがとうございました!夕方にはコードをアップします。


ポイントは「Point 値」が違うということです。

 
PapaYozh:


それは、「Pointの価値が変わる」ということです。

ポイント値は、気配値ごとに異なりますが、その本質は、小数点以下の桁数があるすべての気配値で同じであり、価格の最小ステップです。

ですから、私がストップロスに、例えばAsk-0.003ではなく、Ask-30*Pointを使ったことは、drknnさんの コメントを否定することになります。

"EAは4桁で書かれているのに、デモ口座は5桁 "ということも十分あり得ます。例えば10ポイントの損切り注文を設定すると、5桁のEAでは1pip、4桁のEAでは1pipと同じ距離になってしまいますよね。逆指値注文の最小許容距離を例えば3ポイントとすると、5桁の相場では3ポイントではなく30ポイントになります。10ポイントのストップで注文を出すというコマンドを、サーバーが単純に拒否することは明らかです...」と。

double Point - 現在の商品のクォート通貨でのポイントの大きさ です。
 

ひとことお願いします。

ストップロス/ステークプロフィットレベルの最小値の値をpips単位で出力する簡単なスクリプトを書きました。

int start()
{
int min=MarketInfo(Symbol(),MODE_STOPLEVEL);
Alert(min);
return(0);
}.

ゼロを出力します。このパラメータは標準的な値なのでしょうか?

 

fx_max:

許容されるストップロス/ステイクプロフィットレベルの最小値をpips単位で出力する簡単なスクリプトを書きました。


int min=MarketInfo(Symbol(),MODE_STOPLEVEL);

ゼロを出力する。このパラメータは標準的な値なのでしょうか?


ノー