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

 
V-Force:
私はmq4初心者で、MACDのクロスオーバーがあったときに画面に表示されるようにしようとしています。下記は私のコードですが、アラートは数分おきにポップアップし続けます。

1時間に1回だけアラートが表示されるようにするにはどうしたらよいですか?あるいは、1つのバーに1つのアラートを表示するには?

int start()

{

文字列 MACD1="";

color colt9;

double MACDM_S10 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_MAIN, 0);

double MACDS_S10 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_SIGNAL,0); double MACDS_S11 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_MAIN,0);

double MACDM_S11 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_MAIN, 1)です。

double MACDS_S11 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_SIGNAL,1)です。

if ((MACDM_S11 < MACDS_S11 && MACDM_S10 < MACDS_S10)) { MACD1="IN UPTREND"; colt9=LimeGreen; } }.

if ((MACDM_S11 > MACDS_S11 && MACDM_S10 > MACDS_S10)) { MACD1="IN DOWNTREND"; colt9=Red; }.

if ((MACDM_S11 > MACDS_S11 && MACDM_S10 < MACDS_S10)) { MACD1="NEW UP CROSSING"; colt9=LimeGreen; } { (MACDM_S11 && MACDS_S10) { MACD1="NEW UP CROSSING"; colt9=Blue

if ((MACDM_S11 MACDS_S10)) { MACD1="NEW DOWN CROSSING"; colt9=Red; } {MACD1="NEW DOWN CROSSING"; colt9=Red

文字列 MACD2="";

colt14を色付けします。

double MACDM_L10 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_MAIN, 0);

double MACDS_L10 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_SIGNAL,0)です。

double MACDM_L11 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_MAIN, 1)です。

double MACDS_L11 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_SIGNAL,1)です。

if ((MACDM_L11 < MACDS_L11 && MACDM_L10 < MACDS_L10)) { MACD2="IN UPTREND"; colt14=LimeGreen; } }.

if ((MACDM_L11 > MACDS_L11 && MACDM_L10 > MACDS_L10)) { MACD2="IN DOWNTREND"; colt14=Red; }.

if ((MACDM_L11 > MACDS_L11 && MACDM_L10 < MACDS_L10)) { MACD2="NEW UP CROSSING"; colt14=LimeGreen; } { MACD2="NEW UP CROSSING"; colt14=LimeGREEN

if ((MACDM_L11 MACDS_L10)) { MACD2="NEW DOWN CROSSING"; colt14=Red; }.

if(MACD1=="NEW UP CROSSING"&&MACD2=="IN UPTREND")

Alert(Symbol()," - ", "H1:"," MACD MAIN UPTREND MOVEMENT"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS));

if(MACD1=="NEW DOWN CROSSING"&&MACD2=="IN DOWNTREND")

Alert(Symbol()," - ", "H1:"," MACD MAIN DOWNTREND MOVEMENT"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS));

if(MACD2=="NEW UP CROSSING"&&MACD1=="IN UPTREND")

Alert(Symbol()," - ", "H1:"," MACD, MAIN TREND CHANGE TO UPTREND"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS)");

if(MACD2=="NEW DOWN CROSSING"&&MACD1=="IN DOWNTREND")

Alert(Symbol()," - ", "H1:"," MACD, MAIN TREND CHANGE TO DOWNTREND"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS)");

return(0);

}

Minute()==1;を条件として使ってみる

 

モディファイのトレンドAlexcud

if (MaH11v < MaH1pr1v){H11v = " V "; co11v = Red; u1x5v = 0; d1x5v = 1;} }。

if (MaH11v > MaH1pr1v){H11v = " /̮ "; co11v = Blue; u1x5v = 1; d1x5v = 0;} {H11v = " /̮ "; co11v = Blue; u1x5v = 0;} }。

if (MaH11v == MaH1pr1v){H11v = " 0 "; co11v = Green; u1x5v = 0; d1x5v = 0;} {H11v = " 0 "; co11v = Green; u1x5v = 0; d1x5v = 0;} }。

トレンドアレキを改造しようとしています。

0 "の3つのシグナルではなく、2つのシグナルを上下させたいのです。

そうすれば、より正確な計算ができます。

何かアイデアはありますか?

ファイル:
 

このプログラミングの行を理解するのを誰か助けてくれませんか?簡単に言うと

バーが終了した後にEAが何かを開始することです。

コードは次のようなものです。

datetime timeprev=0;

// 終了したバーごとに一度だけ実行する

if(timeprev==Time[0]) return(0);

timeprev = Time[0]です。

MQ4のマニュアルを見ると、Time[0]はバー[0]のオープン タイムを抽出するためのものです。1970年1月1日からの秒数で記載されています。

この仕組みがよくわかりません。最初に「timeprev=0」とあります。

そして次の行「if (timeprev==Time[0]) return(0)」です。

このときのTime[0]の値は何なのでしょうか?どうして0(timeprevの値)になるのでしょうか?

次の行は、"timeprev=Time[0]"です。

どうしてこの行は、バーが終了するまでEAが何もしないようにしているのでしょうか?

 
crn:
USE Minute()==1;を条件にしてみてください。

これでも各バーの最初の1分間に各ティックが設定されます。これでかなり数は減るかもしれませんが、それでも複数回警告が出ることに変わりはありません。

一番良いのは、グローバル変数(またはオブジェクト)を設定し、それを最後のバーのTime[]に設定することです。

if (Time[0]!=lastTime) {

... alert, whatever...

lastTime=Time[0];

}

 
Jorged23:
こんにちは。

OrderModifyのエラー1:変更前のデータが違うことを制御しようとしても、常に表示されるのが避けられませんdoublelenormalizeも試したのですが、うまくいきません...。

これはコードです。

if (Bid-OrderOpenPrice() >= VPoint*BreakEvenAtProfit)

{

if (OrderStopLoss() != OrderOpenPrice() + BreakEvenShift*VPoint)

{

Vresult = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+ BreakEvenShift*VPoint,OrderTakeProfit(),0,Green).Vresult = OrderTicket(),OrderOpenPrice(),OrderOpenPrice() + BreakEvenShift*VPoint.0,Green);

何か提案はありますか?

ありがとうございます。

クイックチェック...ブレイクイーブンの距離を短く設定しすぎていないか確認してください。MarketInfo(Symbol(),MODE_STOPLEVEL) と比較して、十分な大きさであることを確認します。

VPointの目的は何ですか?この数値が間違っていると、物事がめちゃくちゃになります。"Point "単体では常に正しい値になります。もし、この数値がずれていたら、それは間違いなく問題を引き起こしている可能性があります。つまり、POINTが実際の値よりも誤って0または小さくなっているのです。

 

SIMPLEコーディングの質問

OrderSelect(5555, SELECT_BY_TICKET);

RefreshRates();

if (Ask >= (OrderOpenPrice()+ (5 * Point)) && OrderLots() == 2 && (OrderType() == OP_BUY)){

オーダークローズ(5555,1,アスク,10,赤); } {オーダークローズ(5555)

if (Bid <= (OrderOpenPrice()- (5 * Point)) && OrderLots() == 2 && (OrderType() == OP_SELL)){

OrderClose(5555,1,Bid,10,Blue); }.

まだ勉強中ですが...。

この場合、建値から 5ピップス離れたら半分(2ロット→1ロット)決済するような使い方ができるでしょうか?

ありがとうございます!!!!

 

見た目はだいたい合ってる。ちょっとごちゃごちゃしてますが。実際に何を実現したいかによって、OrderProfitを使うこともできます。

ラックス

PS: 小数点以下5桁のブローカーに注意することを言い忘れました。すべて10倍する必要があるので、あなたの例では5が50になります。幸運を祈ります。

 
luxinterior:
だいたい合っているようです。でも、ちょっと面倒ですね。実際に何をしたいのかによって、OrderProfitを使うこともできます。

ラックス

PS: 小数点以下5桁のブローカーに注意することを言い忘れた。すべて10倍する必要があるので、あなたの例では5が50になります。幸運を祈ります。

LUXさん、ありがとうございます。

問題は、デバッグのためにウィンザーダイレクトの1分足のGBP/USDチャート で動かしているのですが、5pipsになると1ロットも閉じないので、何がどうなっているのかわかりません。

ALSOです。

私は買いを閉じてすぐに売りを開こうとしているのですが、これもうまくいきません。

それは動作し、それがない....

私はこれがプログラミングに非常に簡単であることを望む

if (***************) {

RefreshRates();

OrderSelect(5555,SELECT_BY_TICKET);

if (OrdersTotal() > 0 && OrderType()==OP_BUY){OrderClose(5555, OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");}; }.

Sleep(1500);

RefreshRates();

if (オーダートータル() ==0)チケット = OrderSend(Symbol(), OP_SELL, Lots, Bid, 10, 0, 0, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink)。

if(Ticket<0)Print("OrderSend failed with error #",GetLastError());

}

 

インジケーターのデバッグ

私はこの言語の初心者で、インジケータを書こうとしています。デバッガがないため、困っています。Print()を使ってみましたが、何も出力されません。Alert()を使用すると、バッファ[1]の出力としてZEROが表示されます。どなたか説明してください。どうすれば、Print()とAlert()を使って、すべてのZEROを得ることなくデバッグできるのでしょうか? もし、どなたかアイデアがあれば、教えてください。どうもありがとうございました。

tigger.longtail@gmail.com

ExtMapBuffer1 = iMA(NULL,0,ExtParam1,0,MODE_EMA,PRICE_CLOSE,i);

ExtMapBuffer2 = iMA(NULL,0,ExtParam2,0,MODE_EMA,PRICE_CLOSE,i); ExtMapBuffer2 = iMA(NULL,0,MODE_EMA,PRICE_CLOSE,i);

CurrentBar = Time;

if( ExtMapBuffer1 >= ExtMapBuffer2 && CurrentBar == Time && Flag == 0)

{

Alert("ExtMapBuffer1 =", ExtMapBuffer1," Short is Above.",Hour()," Minute ",Minute());

Alert("ExtMapBuffer2 =", ExtMapBuffer2," Short is Above.",Hour()," Minute ",Minute());

Print("ExtMapBuffer1 = ", ExtMapBuffer1);

Print("ExtMapBuffer2 = ", ExtMapBuffer2); Print("ExtMapBuffer2 = ", ExtMapBuffer2);

 

如何せん