投稿からマジックを生成するコードそのもの //+------------------------------------------------------------------------+ // シリーズの次のマジックを取得 int getNextMagicNumber(){ int magic = EMPTY;
if (OrdersTotal() == 0) { return(startMagicNumber); } とします。
for (int i = startMagicNumber; i < startMagicNumber + MaxTrades; i++){ magic = checkMarketByMagic(i); if (magic != EMPTY) break; } (int=startMagicNumber)、(i=magicNumber + MaxTrades; i++)、(i=startMagicNumber + MaxTrades; i++)。
みんな、もう頭を悩ませているんだ。高値と安値、例えば8本のローソク足で、1/4の利食いでEAに保留注文を出させるにはどうしたらいいのでしょうか。
こんな感じでやってます。
double Vhod1=iHighest(Symbol(),0,MODE_HIGH,8,0);
double Vhod2=iLowest(Symbol(),0,MODE_LOW,8,0);
double TP=((Vhod1-Vhod2)/4)+Vhod1;
パラメータを変更しようとしたが、間違ったストップが表示されたり、価格が7.00000に設定されたりして、どこから来ているのか不明である。
iHighest, iLowestでは、価格ではなく、キャンドルの住所が表示されます。
そうなんです。必要なのは
double Vhod1=iHigh(Symbol(), 0,iHighest(Symbol(),0,MODE_HIGH,8,0)) となります。
double Vhod2=iLow(Symbol(), 0, iLowest(Symbol(),0,MODE_LOW,8,0)) となります。
入れ方を間違えたが、それでも正常に動作しなかったのは......。なぜなら)とにかく、こんな感じでいいんです。
1) IniteにAllowNewOrders変数を作成する(存在しない場合)
2) 新規注文を作成し、それが閉じるまで、このシンボルの OnTick はアイドルですが、他のシンボルの OnTick は実行されます。
3) MaxOpenOrdersの上限に達するまで、他のシンボルに対してステップ2を実行します。
4) 注文が終了したとき、それが負けているか価値がゼロであれば、AllowNewOrdersを通じてすべてのコピーの新規注文を開くことを禁止する。
[ここが当面の問題です。負け続けているシリーズが終了するとAllowNewOrders=1になりますが、MaxOpenOrders>1でこのセッションが複数ある場合はどうでしょうか] 。
5) ポイント4が満たされない場合、新規注文を行うことができます。
MaxOpenOrders=1 のとき、プログラムは動作しなければならない(MUST)。おそらく、採算の取れない注文の後に新規注文を禁止した場合 AllowNewOrders=0で、次のOrderSendで 何らかの理由で注文が開かれないという問題が発生すると思われます。以下に、この場合のヘッジ方法を書きますが・・・。
このような事態を想定して、私がどのようにヘッジしているかを以下に書いてみます...。
エラーの解決策を適切に予見できれば、注文開始の成功率は高まります。
このような条件下で、下記のコードはどのように変化するのでしょうか?
for(cnt=OrdersTotal()-1;cnt>=0;cnt--){
if (!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
if(OrderSymbol()!=Symbol()) continue; if(OrderMagicNumber() < startMagicNumber || OrderMagicNumber() >= startMagicNumber + MaxTrades) continue;
シリーズの最初の注文を開くときにmagikを生成するコードを配置しましたが、同じシリーズの新しい注文を開くときに問題があります。
投稿からマジックを生成するコードそのもの//+------------------------------------------------------------------------+
// シリーズの次のマジックを取得
int getNextMagicNumber(){
int magic = EMPTY;
if (OrdersTotal() == 0) {
return(startMagicNumber);
} とします。
for (int i = startMagicNumber; i < startMagicNumber + MaxTrades; i++){
magic = checkMarketByMagic(i);
if (magic != EMPTY) break;
} (int=startMagicNumber)、(i=magicNumber + MaxTrades; i++)、(i=startMagicNumber + MaxTrades; i++)。
if (magic == EMPTY){
magic = startMagicNumber; // シリーズの最初
} else {
magic++; // シリーズの次
}
return(magic);
}
//+----------------------------------------------------------------+
// keekkenen: 与えられたマジックでマーケットでの注文をチェックする
int checkMarketByMagic(int magic){
for(int i = 0; i < OrdersTotal(); i++){
if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if(OrderSymbol() != Symbol()) continue;
if(OrderMagicNumber() == magic) return(magic);
}
return(EMPTY);
} (注)1.オーダー番号とは、オーダー番号のことです。
//+------------------------------------------------------------------+
私はスレッドを混乱させる場合は申し訳ありませんが、私はテーマを投稿する正しい場所を発見していないので、私を蹴らないでください。
時々、新しいExpert Advisorをネットサーフィンしていると、その説明は標準的で、たくさんあるのに、その名前に注意を払わなかったものに出会うことがあります。
気づかなければ、その名前を聞き逃していたかもしれません。もしかしたら、同じような動作をするEAがあるかもしれません。
Expert Advisorの意味を説明します(今必要なのは、非常に高度なものはありません)。
大雑把に言うと、次のような仕事です。
1.買いなどのポジションを 手動で建てる。
2.Expert Advisor は設定に従って Stop Loss と Take Profit を設定します。
3.注文はテイクプロフィットで決済されます。EAはすぐに別の買いを開き、最初のストップロスをキャッチするまで、または究極のテイクプロフィットがある場合、同じストップロスとテイクプロフィットを設定します。
4.ストップロスでポジションが閉じられた場合、ロボットはそれ以上何もしません。Expert Advisor は、次の注文が手動で開かれるのを待ちます。
以上です。
とてもありがたいことです。
間違えて挿入してしまったのですが、それでも正常に動作しません、なぜなら...。なぜなら)とにかく、こんな感じです。
1) initemにAllowNewOrders変数を作成する(存在しない場合)
2) このシンボルの OnTick はアイドル状態だが、他のシンボルの OnTick は機能する、閉じるまで新しい注文を作成する
3) MaxOpenOrdersの上限に達するまで、他のシンボルに対してステップ2を実行します。
4) 注文が終了したとき、それが負けているか価値がゼロであれば、AllowNewOrdersを通じてすべてのコピーの新規注文を開くことを禁止する。
[ここが当面の問題です。負け続けているシリーズが終了するとAllowNewOrders=1になりますが、MaxOpenOrders>1でこのセッションが複数ある場合はどうでしょうか] 。
5) ポイント4が満たされない場合、新規注文を行うことができます。
MaxOpenOrders=1 のとき、プログラムは動作しなければならない(MUST)。おそらく、採算の取れない注文の後に新規注文を禁止した場合 AllowNewOrders=0で、次のOrderSendで何らかの理由で注文が開かれないという問題が発生すると思われます。この場合、どのようにヘッジしているのか、以下に書きます。
Alexanderさん、ありがとうございます!明日確認してみます。[負けたシリーズが終了すると、AllowNewOrders=1になりますが、MaxOpenOrders>1で複数のセッションがある場合はどうなるのでしょうか?]MaxOpenOrders>1であれば、AllowNewOrders=1も同じ値で大きくなるはずです。しかし、今のところそれを気にする必要はありませんし、このバージョンのプログラムではとにかく1つ以上のシリーズは予定されていないので、MaxOpenOrdersは完全に省略されるべきです。
皆さん、こんにちは。
ここでは、グラフ上のオブジェクトを紹介します。
パラメータはtime, value, codeである。値は、オブジェクトが配置されている価格に対応します。
その時刻と値を取得する方法(関数など)はありますか?
\\\\\
あるいは、広い意味で、(トレンドライン、フィボナッチライン、ガネットは別として)その時間と価格を瞬時に取得できるようなオブジェクトはないのでしょうか?
チャート上にマーカーを置き、そこから情報を得る必要がある。トレンドライン、フィボなどの描画。- 非常に面倒で遅い・・・。
回答ありがとうございました !
PS 勉強を始めたばかりなのに...。
皆さん、こんにちは。
ここでは、グラフ上のオブジェクトを紹介します。
パラメータはtime, value, codeである。値は、オブジェクトが配置されている価格に対応します。
その時刻と値を取得する方法(関数など)はありますか?
\\\\\
あるいは、もっと広い意味で、時間と価格ですぐに導き出せるモノ(トレンドライン、フィボナッチライン、ガネットは別として)はあるのでしょうか?
チャート上にマーカーを置き、そこから情報を得る必要がある。トレンドライン、フィボなどの描画。- 非常に面倒で遅い・・・。
回答ありがとうございました !
PS 勉強を始めたばかりなのに...。
https://docs.mql4.com/ru/objects/objectgetinteger