コーディングの方法は? - ページ 18

 

Michelです。

コードを見るために時間を割いていただき、ありがとうございます。 時々、必要なのはもう一組の目なのです。 あなたの言う通り、エラーは0による除算で、バーが欠けているものでした。 今、すべて解決しました。

BW

 

コードの説明 - Ind-Fractals-1

このインディケータ(https://c.mql5.com/forextsd/forum/165/ind-fractals-1.mq4)でフラクタルがどのように決定されるのか、どなたか説明してください。通常のフラクタルと同様に、ターニングポイントと実際のフラクタルが描かれる間に遅延があることに気づきましたが、その遅延がどのくらいなのか知りたいです。15分のフラクタルはポイントが確立されてから40-50 1分バーで描かれると思います。いくつかの15分のフラクタルが1時間のフラクタルになるとフラクタルが(その位置ではなく)色変わりしていることにも気づきました。

 

をどのようにコーディングするのですか?

こんにちは、皆さん。

私はメタトレーダー4の初心者です。メタトレーダー4でのコーディングについてあまり知りません。

私はメタトレーダーが以下の場合にアラートを出すようにしたいです。

1.30期間の単純移動平均が 60期間の単純移動平均を上回ったとき。

2.30期間の単純移動平均が60期間の単純移動平均を下回る。

どなたか、ここにコードを投稿するのを手伝っていただけませんか?

どうもありがとうございました

 
adamk203:
こんにちは、皆さん。

私はメタトレーダー4の初心者です。メタトレーダー4のコーディングについてはあまり知識がありません。

私はメタトレーダーが以下の場合にアラートを出すようにしたい。

1.30期間の単純移動平均が60期間の単純移動平均を上回ったとき。

2.30期間の単純移動平均が60期間の単純移動平均を下回る。

どなたか、ここにコードを投稿するのを手伝っていただけませんか?

どうもありがとう

MAを入力し、単純に0を選択すると、線と矢印が表示されます。

ファイル:
 

thx a lot~~~

 
increase:
なぜこれを使用しないのですか?あなたのMAを入れて、単純なために0を選択し、あなたのラインと矢印を提供します。

こんにちは、私はクロスオーバーの後に2クリーンキャンドルが終了したときにシグナルが出るようにしたいと思います。

ファイル:
gbp_4h.gif  19 kb
 

pls help 私のコードを修正する

まず第一に、私はこのコードが非常に便利であり、多くの人々がそれを愛すると信じています。だから、私がそれを改善するのを助けてください。

実際、このコードはすでに素晴らしく機能しています。しかし、私は、シンボルが表示されていない単純なアラートポップアップにうんざりしています。そこで、%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%の部分を変更したり追加したりして試してみました。

なぜか、印刷、コメント...何でも、何も起こりません。

そして、奇妙なことに、"----alert-----"の部分を見てください、私はUPBREAK警告を他のものに変えました、しかし、それはまだ "UP BREAK "を表示しています。----きっと、コードを書き換えるたびに、コンパイルして、チャートから削除して、またロードしているのでしょう。

何か思い当たることはありますか?

#property indicator_chart_window

#import "usr32.dll" // %%%%%%%%%%

int MessageBoxA(int hWnd,string lpText,string lpCaption,int uType); //%%%%%%%%%%

#import //%%%%%%%%%%

int PrevAlertTime = 0;

int init()

{

return(0);

}

int deinit()

{

return(0);

}

//+------------------------------------------------------------------+

int start()

{

int i=ObjectsTotal();

int redtotal=0,j,typ1;

double price1,price2,up,down;

color col;

string name1,name2,nameup,namedown,warn1,sym=Symbol();

warn1=sym + "Break Up"; //%%%%%%%%%%

Print(sym); //%%%%%%%%%%%

//----make sure exactly 2 red lines on chart---------------------

for (j=0; j<i; j++)

if(ObjectGet(ObjectName(j),OBJPROP_COLOR)==255 && ObjectType(ObjectName(j))==OBJ_TREND)

{ redtotal++;

if (redtotal==1) name1=ObjectName(j);

if (redtotal==2) name2=ObjectName(j);

}

if (redtotal==2)

{

if(ObjectFind("remind")==0) ObjectDelete("remind");

}

else

{

ObjectCreate("remind",OBJ_LABEL,0,0,0);

ObjectSet("remind", OBJPROP_XDISTANCE,0);

ObjectSet("remind", OBJPROP_YDISTANCE,20);

ObjectSetText("remind", "Keep exactly 2 red lines on chart" ,16,"Times New Roman",Blue);

return(0); // question here: what should I use, 0 or -1 ?

}

//--------decide which line is up / down ---------------------

price1=NormalizeDouble(ObjectGetValueByShift(name1,1),

MarketInfo(Symbol(),MODE_DIGITS));

price2=NormalizeDouble(ObjectGetValueByShift(name2,1),

MarketInfo(Symbol(),MODE_DIGITS));

if (price2>=price1)

{

nameup=name2; namedown=name1;

up=price2; down=price1;

}

else

{ nameup=name1; namedown=name2;

up=price1; down=price2;

}

//-------- alert ----------------------------------------------

if (TimeCurrent() - PrevAlertTime > Period()*60/3)

{

if (Close[1]up)

{ MessageBoxA(NULL,"tupole","11111",0); // %%%%%%%%%%

Print(Symbol()); // %%%%%%%%%%

PrevAlertTime = TimeCurrent();

}

if (Close[1]>=down && Close[0]<down)

{ Alert("DOWN BREAK",Symbol());

PrevAlertTime = TimeCurrent();

}

}

return(0);

}

 

何が問題なのかわかりました。

通常、私はコードを作成または編集します。「メタエディタ---ファイル---新規/開く...」とします。

しかし、今わかったのですが、チャートに貼り付けた後、このコードにいくつかの変更を加えても、最終的に、それ以上の変更は、もうチャートには影響しないのです(確かに私はコンパイルしました!)----- しかし、"Metaeditor--navigator--files--my code..." には影響します!!! これは奇妙なことで、これらは同じコードのはずです。 おかしいな、同じコードのはずなのに。

 

トレールコードのヘルプ

void TrailIt( int byPips ) // based on trailing stop code from MT site... thanks MT!

{

if (byPips >=5)

{

for (int i = 0; i < OrdersTotal(); i++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...

{

if (OrderType() == OP_BUY) {

//if (Bid > (OrderValue(cnt,VAL_OPENPRICE) + TrailingStop * Point)) {

// OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet);

// break;

//}

if (Bid - OrderOpenPrice() > byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {

if (OrderStopLoss() < Bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

} else if (OrderType() == OP_SELL) {

if (OrderOpenPrice() - Ask > byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {

if ((OrderStopLoss() > Ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT)) ||

(OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(),

Ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

}

}

}

}

} // proc TrailIt()

これがそのコードです。添付ファイルにあるように、ある注文でストップを修正するのですが、間違った方向にも修正されてしまい、修正することができません。私は本当に解決策を見つけるために助けを感謝します!

ファイル:
ordermodify.txt  40 kb
 

これを試してみてください。おそらく、異なるシンボルで注文を変更しようとしているように見えます。 その場合、BidとAskはEAが貼り付けられているChartウィンドウのシンボルからしかマーケットデータを取得できません。 MarketData(symbol, MODE_BID)を使用するのが適切なデータを取得する方法です。

void TrailIt( int byPips ) // based on trailing stop code from MT site... thanks MT!

{

if (byPips >=5)

{

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

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

double bid=MarketInfo(OrderSymbol(),MODE_BID);

double ask=MarketInfo(OrderSymbol(),MODE_ASK);

if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...

{

if (OrderType() == OP_BUY)

{

if (bid - OrderOpenPrice() >= byPips * MarketInfo(OrderSymbol(), MODE_POINT))

{

if (OrderStopLoss() < bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT)|| (OrderStopLoss() == 0))

{

OrderModify(OrderTicket(), OrderOpenPrice(), bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

}

else if (OrderType() == OP_SELL)

{

if (OrderOpenPrice() - ask >= byPips * MarketInfo(OrderSymbol(), MODE_POINT))

{

if ((OrderStopLoss() > ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT)) || (OrderStopLoss() == 0))

{

OrderModify(OrderTicket(), OrderOpenPrice(),ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

}

}

}

}

return;

}