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

 
Aaragorn:
私はこれにそれを煮詰めた...しかし、待てよ...。

もしこれが、この1本のバーの単純移動平均に3.5を掛けたものを使って高ポイントを見つけるだけなら、このポイントに達することはありえないでしょう。このポイントに到達する可能性があるのはどうしてでしょうか?ラインの値は、シグナルに触れる必要があるのと同じバーから計算されているのではないでしょうか?バーが上がればエッジラインも上がるのですか?

移動平均は 1本以上のバーから計算されます だから、ラインは1つの値で価格は別のものになります。

 
elihayun:
もし、上の線が価格に近いかどうかを知りたい場合は、両者の差が小さいかどうか(例えば、2ポイント)を調べるのも一つの方法です。

私は、価格がラインの下にあるか上にあるかは気にしません(これは良い考えではありません)。私にとっては、2ポイントの距離が全てです。ですから、その差は

upper - high は、差分を与えてくれますが、ポイントではありません(0.0004または-0.0004のようなものです)。差分が正であることを確認するために、絶対値(正)を返すMathAbs 関数を使用しています。予約語のPointは 価格が1pip上昇したときの値を返します。これは各ペアで異なる。

それをまとめると

if (MathAbs(upper - High) < 2*Point) は、その差が2ピップス以下であることを意味し、私たちにとっては十分に近いものです。

実際、Highを使うのは良くない。なぜなら、Highは上にあるかもしれないが、現在の価格は遠くにあるからだ。Highの代わりにAskを 使用する必要があります(インジケータではClose[x] を使用する必要があります)。

価格がラインの上にあることを確認するために、このようにします。

if ((Ask > upper) && (Ask - upper < 2 * Point))

.....(alert or open a trade)

[/PHP]

あなたは私の質問の多くに答えるために非常に良いですが、私はあなたを消耗していないことを願っています 私は学ぶことを熱望しています。

絶対値については理解できました。このような場合、askの代わりにcloseを使うと何が変わるのでしょうか?closeを使うのは良くないのでしょうか?それとも、それほど違いはないのでしょうか?唯一まだ混乱しているのは、第二条件の2 * point側です。ポイントは2倍されないのでしょうか?それとも掛け算の記号なのでしょうか?

ask-upperは上のラインと現在のアスク値との差を出すということですが、ポイントに2をかけるのでしょうか?その結果、何が比較に使えるのかよくわかりません。

シグナルが買い許容範囲より下に発生した場合のみ、買いを許可するようにできますか?

[php]

extern double longrange = 25; //--買いを禁止する前にトップバンドラインに接近することを許される近さ

extern double shortrange = 20; //-- 売りを許可しない前にボトムバンドラインに近づくことを許される近接性

// エントリー

if(total < 2 || isNewSumbol(Symbol()))//if条件も修正しました:total<1でした(orBanAway aka cucurucu)

{

double HedgeLots = (HedgePercent/100)*Lots; //ヘッジされたポジションのロットを計算します。

if(isCrossed == 1 && Ask < upper-longrange)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green).のようになります。

さもなくば

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green).もしも、ticketが0を超えたら?

if(チケット>0)

{

if(オーダーセレクト(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("BUY order opened : ",OrderOpenPrice());

}

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

1つのことが欠けています。ポイントを理解するために、次のようなことを想像してみてください。

USDJPYの価格が114.95で、EURUSDの価格が1.2773であるとします。

したがって、USDJPYのAskとUpperは次のようになります。114.95 - 114.93 = 0.02

EURUSDでは、1.2773 - 1.2771 = 0.0002となります。

どちらも2つのポイントですが、精度が異なるため、USDJPYでは2を0.01倍、EURUSDでは0.0001倍しなければならず、どのペアでもこれがまさにPointと 同じになるのです。

 
elihayun:
移動平均は1本以上の棒グラフから計算されます。 ですから、線は1つの値で、価格は別の値になります。

その通り!どうして1本のバーのみの平均になるのでしょうか?

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

int x = 0;

double middle2= iMA(NULL, 0, back, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

double avg;

avg = findAvg(back, x);

double upper = middle2 + (3.5*avg);

double lower = middle2 - (3.5*avg); [/PHP]

I don't see how this works....also the compiler say, 'findAvg' - function is not defined

it's looking for the shift value x which is zero so that is only going to be the current bar right? So what is it averaging?

ok let me see what might be...if i'm telling it to go 'back' 300 periods that is what it's averaging is 300 periods. ok i get it now i think....

now about the undefined function error? what do I do about that? just get rid of it as unnecessary?

[PHP]//----------channel filter

int x = 0;

double middle2= iMA(NULL, 0, back, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

double avg;

avg = (back, x);

double upper = middle2 + (3.5*avg);

double lower = middle2 - (3.5*avg);
 
elihayun:
一つ足りないことがある。ポイントのことを理解するために、次のようなことを想像してみてください。

USDJPYでは114.95、EURUSDでは1.2773となっています。

ということで、USDJPYのAsk-upperは、以下のようになります。114.95 - 114.93 = 0.02

EURUSDでは、1.2773 - 1.2771 = 0.0002となります。

どちらも2つのポイントですが、精度が違うので、USDJPYでは2を0.01倍、EURUSDでは0.0001倍しなければならず、どのペアでもこれがまさにPointと 等しいのです。

私がしたいのは、上下のラインに近接したバリアーを 作ることです。

-だから、まずラインの現在の値を取得します。

-それから、取引に耐えられないと定義したい距離を、1=1ピップの動きと見なす整数値で足したり引いたりするんだ。

-それから、比較するために、各ティックで価格がどの位置にあるかを取得する必要があります。

この行は'price_Typical'以外に何かあるのでしょうか?

double middle2= iMA(NULL, 0, back, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

ということで、この行は'price_Typical'以外のものにすべきなのでしょうか。私がしたいのは、価格の動きを線の動きと比較して、「このレベルより上ではロングトレードをしない」「このレベルより下ではショートトレードをしない」と指定することなのですが・・・。

もう休みたいよ......脳みそがドロドロになっちゃったよ。

 

PRICE_TYPICALは関係ありません。MQL4のヘルプに記載されています。

価格とラインの差を知るには、一方を他方から引くだけでよいのです。問題は0.0006と0.06があることで、これはPointが解決しています。

(そろそろ締めなければなりません。続きは明日にしましょう)

 
elihayun:
一つ足りないことがあります。ポイントについて理解するために、次のことを想像してみてください。

USDJPYでは114.95、EURUSDでは1.2773となっています。

ということで、USDJPYのAsk-upperは、以下のようになります。114.95 - 114.93 = 0.02

EURUSDでは、1.2773 - 1.2771 = 0.0002となります。

どちらも2つのポイントですが、精度が異なるため、USDJPYでは2を0.01倍、EURUSDでは0.0001倍しなければならず、どのペアでもこれはまさにポイントが 等しくなるものなのです。

ということは、それぞれのペアで要求される精度の違いに関係なく、ピップの動きを追跡するようなものなのでしょうか?

 
elihayun:
PRICE_TYPICALは何の関係もありません。

価格とラインの差を知るには、一方を他方から引くだけでよいのです。問題は、0.0006になる時と0.06になる時があることで、これはPointが解決しています。

(この続きは明日にします。)

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

 

これは私がやったことです...。

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

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

double LowLevel = iCustom(NULL,TF, "Trend Bands v2", back, 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-longrange)

{

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 + shortrange)

{

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);

}

}

//+------------------------------------------------------------------+[/PHP]

this is what I got from the tester....

[PHP]2006.06.30 11:18:09 2006.06.06 14:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.06 12:14 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.06 10:26 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.05 22:47 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.05 09:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 08:41 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 07:30 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 07:29 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:08 2006.06.02 19:55 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:08 2006.06.01 11:27 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 06:45 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 04:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 02:44 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 00:37 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:00 2006.05.31 04:00 Trend Bands v2 EURUSD,M30: loaded successfully

2006.06.30 11:18:00 EMA_CROSSv5 EURUSD,M5: Tester comment: ----------------------------------------

TakeProfit=10 | TrailingStop=20 | StopLoss=20 | UseStopLoss=False

----------------------------------------

immediate_trade=True | reversal=False

----------------------------------------

Lots=1 | MM=True | Risk=10%

----------------------------------------

2006.06.30 11:18:00 EMA_CROSSv5 inputs: TakeProfit=10; TrailingStop=20; StopLoss=20; ShortEma=1; LongEma=5; Lots=1; HedgePercent=1; StartHour=0; StopHour=23; Risk=10; MAGICMA=20060301; longrange=1; shortrange=1; back=30; TF=30;

2006.06.30 11:17:35 EMA_CROSSv5: loaded successfully

を見ると、設定はできているのですが、空白になってしまっています・・・。

明らかにトレードを禁止しているのに、全部?ロングとショートのレンジを1に設定しただけなのに、信じられない。確かに、そのレンジの中にいくつかのトレードシグナルがあったのでしょうか?これは私が意図したとおりになっていないと思います。

ファイル:
mac5.htm  5 kb
 

トレンドバンドのインジケータを変更したので、より柔軟になりました。

extern int period = 34;

extern int factor = 8;

avg = findAvg(period, x);

upper[x] = middle2 + (factor*avg);

lower[x] = middle2 - (factor*avg);[/PHP]

then i did this to the EA

//---- Trend Bands v2 and Filter Parameters

extern double back = 300; //--how many periods back for the custom indicator to average

extern double bandwidth = 6; //--how wide the trend bands are

extern double TF = 30; //--which bar period for the custom indicator to use

//----------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);

I got this from the tester...(slightly abbreviated report)..

[PHP]2006.06.30 12:10:38 2006.06.29 23:59 Trend Bands v3 EURUSD,M30: removed

2006.06.30 12:10:38 2006.06.29 20:21 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:21 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:20 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:20 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:16 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:16 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:15 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:15 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:12 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:12 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:04 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:04 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:03 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:03 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:00 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:00 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:00 Trend Bands v3 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 12:10:38 2006.06.29 19:59 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:59 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:32 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:32 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:25 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:25 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:21 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:21 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:20 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:20 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:09 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:09 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:08 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:08 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:06 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:06 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 18:35 Trend Bands v3 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 12:10:38 2006.06.29 18:16 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 18:16 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 18:15 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 18:15 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:37 2006.06.29 00:00 Trend Bands v3 EURUSD,M30: loaded successfully

2006.06.30 12:10:37 EMA_CROSSv5 EURUSD,M5: Tester comment: ----------------------------------------

TakeProfit=10 | TrailingStop=20 | StopLoss=20 | UseStopLoss=False

----------------------------------------

immediate_trade=True | reversal=False

----------------------------------------

Lots=1 | MM=True | Risk=10%

----------------------------------------

2006.06.30 12:10:37 EMA_CROSSv5 inputs: TakeProfit=10; TrailingStop=20; StopLoss=20; ShortEma=1; LongEma=5; Lots=1; HedgePercent=1; StartHour=0; StopHour=23; Risk=10; MAGICMA=20060301; back=300; bandwidth=6; TF=30;

この後、バンドに触れないように帯域幅を20にしたのですが...まだ「error opening 131」が表示されます。

ERR_INVALID_TRADE_VOLUME 131 無効な取引量 です。

どうしたんだろう?