アスク! - ページ 129

 
forexarchitect:
こんにちは

ここで質問なのですが、以下のように変更するにはどうしたらいいのでしょうか?

extern double MaxLot = 1.50;

double max_lot = GetMaxLot(OP_BUY, OP_SELL);

if (max_lot >= MaxLot) lot = CalcHedgeLot(order_type);

(注文タイプ)]:", lot);

if (lot == -1) return (lot);

lot = NormalizeDouble(lot, LotPrec);

if (lot > MaxLot) lot = MaxLot;

if (lot < MinLot) lot = MinLot; if (lot > MaxLot) lot = MaxLot; if (lot < MinLot) lot = MinLot;

return (lot)。

}

上記は、OP_BUYと OP_SELLのチェックです。

質問:これを任意のOP_BUYまたは任意の OP_SELLに変更するにはどうすればよいですか?

認める

GetMaxLot()関数の コードを修正するか、GetMaxLot(OP_BUY, OP_BUY);とGetMaxLot(OP_SELL, OP_SELL);(コードによって異なります - そのようにできるかどうか)を使うことができるかもしれないです。

しかし、私はそれが試してみる価値があると思います。

Goen

 
Goen:
これはあなたが探しているものですか?

-----------

int bars_count=WindowBarsPerChart();

int bar=WindowFirstVisibleBar()。

-----------

ゴーン

ありがとうございます、Goen 。

 
Goen:
GetMaxLot() 関数のコードを修正する必要があります。または、GetMaxLot(OP_BUY, OP_BUY); と GetMaxLot(OP_SELL, OP_SELL); を使うことができます(コードによって、そのようにできるかどうかが異なります)。

しかし、私はそれが試してみる価値があると思います。

Goen

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

何を変更すればいいのでしょうか?

double GetMaxLot(int type1, int type2)

{

double max_lot = 0.0;

int cnt = OrdersTotal();

for (int i=0; i < cnt; i++)

{

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderMagicNumber() != Magic) continue;

if (OrderType() != type1 && OrderType() != type2) continue; もし、(OrderType() != type1 && OrderType() != type2) continue;

if (max_lot == 0 || OrderLots() >= max_lot)

{

max_lot = OrderLots();

}

return (max_lot)。

}

 

ちょっと困りますが...。

 

TISインジケーターにアラートを追加するには?

MAクロスオーバーのインジケーターはとてもよく動くのですが、サウンドアラートのサポートがないので、多くのトレードをミスしてしまいます。

以下はインジケーターのコードとインジケーターそのものです、ありがとうございます...

/*[[

名前 := EMA Cross

作者 := Hapsa

リンク :=http://www.metaquotes.net/

セパレートウィンドウ := No

セパレート・ウィンドウ := No

最初の色 := 赤

最初の描画タイプ := シンボル

最初のシンボル := 108

第二データ使用 := Yes

第二の色 := DarkOliveGreen

第二描画タイプ := シンボル

第2シンボル := 108

]]*/

#property copyright "Hapsa" (ハプサ)

#property リンク ""

extern int SlowPeriod=20;

extern int FastPeriod=5;

#property indicator_buffers 3

#property indicator_chart_window

#property indicator_color1 レッド

#property indicator_color2 グリーン

double L20[];

double L50[];

double shift=0,val1=0,val2=0。

int init()

{

IndicatorBuffers(3);

SetIndexStyle(0,DRAW_ARROW)を設定します。

SetIndexStyle(1,DRAW_ARROW)を設定します。

SetIndexArrow(0, 108);

SetIndexArrow(1, 108);

SetIndexBuffer(0,L20)を設定します。

SetIndexBuffer(1,L50)を設定します。

//---- インジケータ

//----

return(0);

}

int start()

{

int counted_bars=IndicatorCounted();

//----

int i = Bars - counted_bars - 1;

while (i>=0)

{

val1=0;

val2=0;

double iMaSlowPrevious = iMA(NULL,0,SlowPeriod,0,MODE_EMA, PRICE_CLOSE, i-1);

double iMaSlowCurrent = iMA(NULL,0,SlowPeriod,0,MODE_EMA,PRICE_CLOSE,i);

double iMaFastPrevious = iMA(NULL,0,FastPeriod,0,MODE_EMA,PRICE_CLOSE,i-1); double iMaFastPrevious = iMA(NULL,0,FastPeriod,0,MODE_EMA,PRICE_CLOSE,i-1);

double iMaFastCurrent = iMA(NULL,0,FastPeriod,0,MODE_EMA,PRICE_CLOSE,i);

if (iMaFastPreviousiMaSlowCurrent ) val1=High;

if (iMaFastPrevious>iMaSlowPrevious && iMaFastCurrent<iMaSlowCurrent ) val2=Low;

L20=val1+5*Point;

L50=val2-5*Point;

i--;

}

//----

return(0);

}

ファイル:
cross.mq4  2 kb
cross.ex4  3 kb
 
forexarchitect:
回答ありがとうございます。

何を変更すればよいのでしょうか? ご教授願います。

double GetMaxLot(int type1, int type2)

{

double max_lot = 0.0;

int cnt = OrdersTotal();

for (int i=0; i < cnt; i++)

{

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderMagicNumber() != Magic) continue;

if (OrderType() != type1 && OrderType() != type2) continue; もし、(OrderType() != type1 && OrderType() != type2) continue;

if (max_lot == 0 || OrderLots() >= max_lot)

{

max_lot = OrderLots();

}

return (max_lot)。

}

はい、買い建玉の最大ロットのみを取得するには GetMaxLot(OP_BUY,OP_BUY); を使用し、売り建玉の最大ロットのみを取得するには GetMaxLot(OP_SELL,OP_SELL); を使用することができます。

このコード "if (max_lot == 0 || OrderLots() >= max_lot)" を "if (OrderLots() > max_lot)" に単純化することができます。

もし、max_lot = 0 ならば、それは自動的に未決済取引のどのロットよりも低くなります。また、">="という記号は">"に変更します。なぜなら、同じ値であれば、同じ値でmax_lotを更新する必要はなく、無駄な労力を必要としないからです。新しい値がmax_lotより大きい場合のみ更新されます。

このコードを変更することで、処理を高速化することができます。

Goen

 

ストップロス問題

こんにちは。

私はFX/メタトレーディングの初心者ですが、どのように機能するかを理解しようとしています。

今、EAを書こうとしているのですが、何か基本的なことを見逃しているような気がしています。

もし、私のコードで、以下を置き換えると

OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,"",MAGIC,0,Red);

OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+Point*10,0,"",MAGIC,0,Red) と置き換えます。

この新しいバージョンをストラテジーテスターでテストしてみると、注文が少なくなっています。ストップロスを入れると、どうして注文の 数が減るのでしょうか?逆指値注文を入れると注文が早く出るので、新しい注文を早く入れられるというケースでは数が増えると想像できるのですが、注文が少なくなる・・・?

どうでしょうか?

ありがとうございます。

 
azertyken2:
こんにちは。

私はFX/メタトレーディングの初心者ですが、その仕組みを理解しようとしています。

今、EAを書こうとしているのですが、何か基本的なことを見逃しているような気がしています。

もし、私のコードで、以下を置き換えると

OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,"",ordercount,0,Red);

OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+Point*10,0,"",ordercount,0,Red) と書き換えます。

この新しいバージョンをストラテジーテスターでテストしてみると、注文が少なくなっています。ストップロスをつけると、どうして注文数が減るのでしょうか?逆指値注文を入れると注文が早く出るので、新しい注文を早く入れられるというケースでは数が増えると想像できるのですが、注文が少なくなる・・・?

どうなんでしょう?

感謝

10pipsはブローカーが設定したストップリミット(ブローカーによって異なる)に近すぎるかもしれません。つまり、10pipsのミニマムで、注文が出されているときにたまたま価格がこの中で1pips振れると、注文は拒否されるでしょう...。

 

オムレツさん、おっしゃる通り、ストップロスを増やすと直りました!ありがとうございます。:-)

 
#property indicator_color1 Magenta

#property indicator_color2 Yellow

extern bool TrendDirectionUp=true;

string Color1;

string Color2;

int init() {

if(TrendDirectionUp==true)//Conditionj 1

{

Color1=Yellow;

Color2=CLR_NONE;

}

if(TrendDirectionUp==false)//Condition2

{

Color1=CLR_NONE;

Color2=Magenta;

}

SetIndexStyle(0,DRAW_ARROW,0,star_size,Color1);

SetIndexStyle(1,DRAW_ARROW,0,star_size,Color2);

SetIndexArrow(0,172);//333

SetIndexArrow(1,172);//334

SetIndexBuffer(0,b1);

SetIndexBuffer(1,b2);

return(0);

}

今現在、Color(s) 1とColor(s) 2の両方がグラフ上で'black'を表示しています。

この問題を解決するために、どなたか専門家のGuruに助けていただけないでしょうか?

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