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

 
 

まだこのインジケーターに音声による警告を追加しようとしています......。うまくいかないので、どなたかコードをチェックして いただけませんか?

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

//|

//|

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

#property copyright "niva"

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 White

#property indicator_color2 Red

extern bool Email_Enabled = false;

extern bool Alert_Enabled = true;

//---- input parameters

int CountBars=10000;

//---- buffers

double uptrend[];

double downtrend[];

bool AlertSent,EmailSent;

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

//| Custom indicator initialization function |

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

int init()

{

//---- indicator line

IndicatorBuffers(2);

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,217);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,218);

SetIndexBuffer(0,val1);

SetIndexBuffer(1,val2);

//----

return(0);

}

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

//| AltrTrend_Signal_v2_2 |

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

int start()

{

if (CountBars>=Bars) CountBars=Bars;

int i,shift,counted_bars=IndicatorCounted();

int uptrend, downtrend;

for (shift = CountBars; shift>=0; shift--)

{

if(High[shift-1]>High[shift]&&Low[shift-1]>Low[shift]&&uptrend!=3){

uptrend = uptrend+1;

downtrend=0;

}else if(High[shift-1]<High[shift]&&Low[shift-1]<Low[shift]&&downtrend!=3){

downtrend=downtrend+1;

uptrend=0;

}

else{

uptrend=0;

downtrend=0;

}

if (uptrend==3)

{

val1[shift]=Low[shift];

}

if (downtrend==3)

{

val2[shift]=High[shift];

}

}

return(0);

}

//----

if (Alert_Enabled && (uptrend[0] != 0 || uptrend[0] !=0) && !AlertSent)

{

Alert(Symbol() + "HiLow+3");

AlertSent=true;

}

if (Email_Enabled && (downtrend[0] != 0 || downtrend[0] !=0) && !EmailSent)

{

SendMail(Symbol() + "HiLow+3","HiLow+3 indicator triggered");

EmailSent=true;

}

if(downtrend[0] == 0 && uptrend[0] == 0 )

{

EmailSent=false;

AlertSent=false;

}

return(0);

}

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

ありがとうございます。

mrwobbles:
コードのどこかで括弧がアンバランスになっています。コードのどこかに } と ) が抜けているようです。開いている場合は+1、閉じている場合は-1です)その数を数えてみてください。正しくインデントされていれば、どこに正しい}を入れるかわかるはずです。ハッピーハンティング

いくつかの設定を変更し、ようやくほぼ完成しました。現在、以下のようなコーディングの後に、こう表示されます。

'shortSL' - 変数が定義されていません。

'longSL' - 変数が定義されていません。

こんな感じです。

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

//| Salgado.mq4|。

//|salgadoguilherme@hotmail.com|

//| |

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

#property copyright ""

#property link "salgadoguilherme@hotmail.com"

extern bool trade=true;

extern int barstocount=50;

extern double lots=0.01;

extern int StopLoss =40;

extern int TakeProfit =10;

extern int slippage=3;

extern int magicnumber=816;

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

//| エキスパート初期化関数

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

int init()

{

//----

//----

return(0);

}

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

//| エキスパート初期化関数

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

int deinit()

{

//----

//----

return(0);

}

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

//| エキスパートスタート機能

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

int start()

{

//----

if(トレード==true)

{

//M15

double M15_resistance=iCustom(NULL,PERIOD_M15,"!LinRegrBuf", "true",barstocount,2,0);

double M15_resistance_p=iCustom(NULL,PERIOD_M15,"!LinRegrBuf", "true",barstocount,2,barstocount-1);

double M15_line=iCustom(NULL,PERIOD_M15,"!LinRegrBuf", "true",barstocount,0,0);

double M15_support=iCustom(NULL,PERIOD_M15,"!LinRegrBuf", "true",barstocount,1,0);

double slopeM15=((M15_resistance-M15_resistance_p)/barstocount)/Point;

//Alert(DoubleToStr(slopeM15,2);

コメント(

「を入力します。

//ショートエントリー

if(slopeM15<0 && IsTradeAllowed()==true)

{

bool shortopen=false;

int ord_cnt1=OrdersTotal();

for (int start1=0;start1<ord_cnt1;start1++)

{

OrderSelect(start1, SELECT_BY_POS, MODE_TRADES);

if(OrderMagicNumber()==magicnumber && OrderType()==OP_SELL)

{shortopen=true;}。

}

if(shortopen==false)

{

double M15High=iHigh(Symbol(),PERIOD_M15,0);

if(M15High>=M15_resistance)とする。

int shortticket=OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,Bid+shortSL,M15_line,DoubleToStr(slopeM15,2));

if(shortticket<0)

{

//ロングエントリー

if(slopeM15>0 && IsTradeAllowed()==true)

{

bool longopen=false;

int ord_cnt=OrdersTotal();

for (int start=0;start<ord_cnt;start++)

{

OrderSelect(start, SELECT_BY_POS, MODE_TRADES);

if(OrderMagicNumber()==magicnumber && OrderType()==OP_BUY)

{longopen=true;}。

}

if(longopen==false)

{

double M15Low=iLow(Symbol(),PERIOD_M15,0);

if(M15Low<=M15_support)とする。

int longticket=OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,Ask-longSL,M15_line,DoubleToStr(slopeM15,2));

if(longticket<0)

{

//----

return(0);

}

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

 

キャンドル型インディー

こんにちは。

私は、添付されたチャートのようなキャンドル型インジケータのコーディング方法に関するMQLチュートリアルをひどく必要としています。このフォーラム内外のどこかへのリンクだけで結構です。本当にありがとうございます。

パイパー

ファイル:
ma_candles.gif  15 kb
 

どなたか、次のようなコードの書き方を教えてください。

短期MAが長期MAを越えてからバーの 数を数える。

ありがとうございます。

 

シャットダウン後にトレードを再開するEAコード

こんにちは。

停止した後、再び取引を再開することができるEAのサンプルコードはないでしょうか?

ありがとうございます。

JForex

 

コードの書き方は?

darvasboxes:
どなたか、以下のコードの書き方を教えてください。

短期MAが長期MAとクロスしてからのバーの数を数える。

ありがとうございます。

うん!

クロスしてからの小節数を数える。

int i;

bool shortGreater = (iMA(NULL,0,8,8,MODE_SMMA,PRICE_MEDIAN,0) > iMA(NULL,0,24,8,MODE_SMMA,PRICE_MEDIAN,0));

bool sgLast;

for(i=0;i<iBars(NULL,0);i++) {

sgLast = shortGreater;

shortGreater = (iMA(NULL,0,8,8,MODE_SMMA,PRICE_MEDIAN,i) > iMA(NULL,0,24,8,MODE_SMMA,PRICE_MEDIAN,i)).

if(shortGreater !== sgLast) { {。

ブレーク

}

}

iという変数には、クロスしてからのバーの本数が入ります。

もし、これが役に立ったなら、私に現金を送ってください。 ありがとうございました。

 

お待たせしました。

Guilhermesalgado:
私はいくつかの設定を変更し、最終的に私はほぼそこにあると信じている!私は、いくつかの設定を変更することに成功した。今、以下のコーディングの後、それは言う。

'shortSL' - 変数が定義されていません。

'longSL' - 変数が定義されていません。

はい、これです。 私はあなたがしたことを受けて、コンパイルできるように修正しました。 注意してください、あなたのロジックは悪く、不完全に見えますし、おそらくあなたが望むようにはならないでしょう。

でも、これでいいんだ。

- ChazzMoney

P.S. 170ドルというのはプログラムとしては非常に安いですね。 私は年に1、2回、5桁の金額でカスタム投資ソフトを書いています。 この種の仕事を請け負うプログラマーは注意しなければならない。 バグはランダムトレーダーと同じです。

もし、これが役に立ったと思ったら、遠慮なく現金を送ってください。 という思いがありがたい。

ファイル:
 

標準のZigZagからのコード

こんにちは

このコードは標準の "ZigZag.mq4 "にあるものです。

"if (counted_bars==0 && downloadhistory) // 履歴がダウンロードされた"

counted_bars==0 : 値がゼロに等しいかどうかをチェック する......それはOKです。

downloadhistory : 条件チェックがないのはなぜでしょうか?

ありがとうございます。

 

2つの注文をオープンし、2つの注文をクローズする...CONSISTENTLY。

私は長い間、私のEAが常に買いまたは売りのための2つの注文を開くようにしようと努力してきました。1つはTP付き、もう1つはNONE付き。2つの注文を出したら、反対方向に取引するときまで、もう注文を出さない。

なぜか、口座の履歴を見ると、1つの注文、3つの注文、4つの注文、2つの注文とゴミのように動いているのです。

この辺のコーディングマスターの方、ちょっと覗いてみて、ご意見をいただけませんか?

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

OPEN ORDERS

-------

BuyTicket1 = False;

BuyTicket2 = False;

while (!BuyTicket1) {

BuyTicket1 = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLoss, Ask + TakeProfit * Point, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue).BuyTicket2 = False; "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue).BuyTicket3 = False;

Sleep(PausebetweenOrders * 1000);}を実行します。

//if (BuyTicket1 && SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open 1st Buy")を送信。

Sleep(1000);

while (!BuyTicket2){。

BuyTicket2 = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLoss, 0, "2nd Buy(#" + MagicNumber + ")", MagicNumber, 0, BlueViolet).BuyTicket2(OP_BUY、Lots, Ask, Slippage, StopLoss, 0, "2回目の買い", MagicNumber + ");

Sleep(PausebetweenOrders * 1000);}.

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

注文を閉じる

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

if(オーダートータル() > 0) { ------------ オーダーを閉じる

OrderSelect(0, SELECT_BY_POS, MODE_TRADES);

if(OrderType() == OP_SELL){。

for (int j = OrdertotalCloseSell-1; j >= 0; j --) {.

PositionClosedSell = False;

AttemptsTriedCloseSell = 0;

オーダーセレクト(j, SELECT_BY_POS, MODE_TRADES)。

while (!PositionClosedSell && AttemptsTriedCloseSell < CloseposnAttempts) {。

AttemptsTriedCloseSell = AttemptsTriedCloseSell + 1;

OrderCloseSell = OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, MediumSeaGreen);

Sleep(PausebetweenOrders * 1000);

if( OrderCloseSell == True ) { // ポジションクローズ成功。