コーディングヘルプ...アラートの代わりにインジケータをフィルタリングする方法を教えてください。 - ページ 5

 

注文が現在のビッド/アスクに近すぎる。注文は現在の価格から一定距離以上離れている必要があります。Marketinfo関数で stop_levelパラメータを使用してその情報を抽出し、注文がアスク/ビッドからその程度離れていることを確認します。

お役に立てれば幸いです。

 
Maji:
注文が現在のビッド/アスクに近すぎるのです。注文は現在の価格から一定の距離を置く必要があります。Marketinfo関数でstop_levelパラメータを使用してその情報を抽出し、注文がアスク/ビッドからその程度離れていることを確認してください。 これが役立つことを願っています。

うーん......

申し訳ありませんが、私はあなたを失った...

今現在の水準で注文を出すことはできないのでしょうか?今まで私がやってきたことは、ほとんどが期先の終値で注文を実行してきました。これってできるんですか?

stop_levelパラメータとmarketinfo関数が何なのか、まず勉強しないといけませんね。

ご指導ありがとうございました。

トレンドバンドインディケータをアップデートしてみました。

さて、ここで...

MarketInfo()関数で使用される市場情報の 識別子です。

以下の値のいずれかになります。

MODE_STOPLEVEL 14 ストップレベル(ポイント)。

ということは...

MarketInfo(14)

ってどこに書けばいいんだ?

それとも...

MarketInfo(NULL,MODE_STOPLEVEL) です。

または...

double bid =MarketInfo(NULL,MODE_BID);

double ask =MarketInfo(NULL,MODE_ASK);

double point =MarketInfo(NULL,MODE_POINT);

この使い方がよくわからないのですが、例を示してもらえますか?

このEAは以前は注文を出すのに苦労しなかったのに、なぜ今は注文を出すようになったのでしょうか?フィルターを追加する前はうまくいっていたのに?

//----------channel filter

double upLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 0, 0);

double LowLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 2, 0);

// ENTRY

if(total < 2 || isNewSumbol(Symbol())) //I have modified the if condition too: it was total<1 (orBanAway aka cucurucu)

{

double HedgeLots = (HedgePercent/100)*Lots; //calculates the Lots for the hedged position

if(isCrossed == 1 && Ask < upLevel)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

//###################################################################### the added code starts here

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

//###################################################################### ends here

return(0);

}

if(isCrossed == 2 && Ask > LowLevel)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

//###################################################################### the added code starts here

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

//###################################################################### ends here

return(0);

}

return(0);

}

return(0);

}

return(0);

}

}

//+------------------------------------------------------------------+
ファイル:
 

ストップオーダーを 現在の価格からどの程度離すべきかは、MarketInfo(NULL,MODE_STOPLEVEL)を使って決定する必要があります。これはピップ単位で値を返します。

しかし、次のような方法でポイントに変換することができます。

double MinDist = NormalizeDouble(MarketInfo(NULL,MODE_STOPLEVEL)*Point, Digits);

これで、あなたのストップオーダーが少なくとも現在の市場価格からその距離だけ離れていることを確認できます。ちなみに、NormalizeDoubleとDigitsを使うことで、pipの値を10進数以降の適切な場所(4または2)に変換しています。これはMT4のとてもいいところですね。

お役に立てれば幸いです。

マジ

 
Maji:
逆指値注文が現在の価格からどのくらい離れているかを決定するには、MarketInfo(NULL,MODE_STOPLEVEL)を使用する必要があります。これはピップ単位で値を返すことに注意してください。

ただし、以下のような方法でPointに変換することができます。

double MinDist = NormalizeDouble(MarketInfo(NULL,MODE_STOPLEVEL)*Point, Digits);

これで、あなたのストップオーダーが少なくとも現在の市場価格からその距離だけ離れていることを確認できます。ちなみに、NormalizeDoubleとDigitsを使うことで、pipの値を10進数以降の適切な場所(4または2)に変換しています。これはMT4のとてもいいところですね。

お役に立てれば幸いです。

マジ

なぜインディケータをフィルターとして追加すると、注文やストップの置き方がおかしくなるのかがわかりません。私の知る限りでは何も変わっていないのですが、なぜラインより上の取引を禁止するとストップオーダーの 出し方が変わってしまうのでしょうか?

 

もし差し支えなければ、現在のコードをメールで送ってください。週末にそれを見てみるつもりです。必ず直るとお約束はできませんが、誠実に対応させていただきます。

 

まず、あなたの問題点はここにあります。

if(isCrossed == 1 && Ask < upLevel-longrange)[/PHP]

Ask and upLevel are in "price" (like 115.56 or 1.2678) while longrange is in pips (like 4,5,6) and u cannot mixed them. U have to normalize the pips to "price" and this is done by muliplying the pips with Points

the corrected code is like that

[PHP]if(isCrossed == 1 && Ask < upLevel-longrange*Point)
 

今回ばかりは簡単な解決策です。

ただ...

ただ、この投稿をした後、私はそれを変更しました。 バンドを広くしたり狭くしたりするパラメータでインジケータを修正し、ラインに近接する境界を作るEAの部分を削除しました。トレードバンド自体を狭くしたり広くしたりすれば、そんなに複雑なことをしなくても同じような機能が 得られるし、私にとっては精神的にも楽だと思ったので......。

現在はこんな感じです。

//----------channel filter

double upLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 0, 0);

double LowLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 2, 0);

// ENTRY

if(total < 2 || isNewSumbol(Symbol())) //I have modified the if condition too: it was total<1 (orBanAway aka cucurucu)

{

double HedgeLots = (HedgePercent/100)*Lots; //calculates the Lots for the hedged position

if(isCrossed == 1 && Ask < upLevel)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

askとuplevelの両方が価格になっていますね。 これはまだエラーが発生しているコードです。

 

今のところ問題はありません(コード指向)。

しかし、論理的には、次のようになります。

if(isCrossed == 1 && Ask < upLevel)

あなたは、両者が接近していることをチェックして いるのではなく、価格がラインより低いことをチェックしているだけです。

 

私はそれを持っていることを知っていた!!!

このEAは、4つのTFを同時にチェックすることができます。

このEAは、最大4つのTFをチェック することができ、それらのすべてが同時にエッジを得るかどうかを確認することができます。1つだけ選択することも可能です。

インジケーターのロジックの出し方、複数のTFの組み合わせの例としてお使いください。

よろしくお願いします。

エリ

ファイル:
tbs.mq4  7 kb
 
elihayun:
やっぱりあるんだーーーー。

私は、あなたが取得したいものを正確にテストし、私のpreviousuos投稿は、ちょうど間違ったEAを置く。

このEAは、最大4つのTFをチェックすることができ、それらのすべてが同時にエッジを得るかどうかを確認します。1つだけ選択することも可能です。

インジケーターのロジックの出し方、複数のTFの組み合わせの例としてお使いください。

よろしくお願いします。

エリ

this is intriguing 私はまだマルチTFのインジケーターを本格的に研究したことはありませんが、メリットはあると思っています。

理由: