• 締切済み

MT4のEAがエントリーしません

上向きの移動平均線をローソク足が下から抜けたら買いエントリーし、4本値すべて移動平均線の下にいったらイグジット、売りは逆というEAをiCutomの本を見ながら作ってみたのですが、ポンド円の一分足で半日稼働したけれど全くエントリーしませんでした。どこがわるいのでしょうか?宜しくお願いします。(以下が内容です)因みにコンパイルしてエラーはありませんでした。 // マジックナンバーの定義 #define MAGIC 5582 // パラメーターの設定// extern int MA_Period = 21; // 短期移動平均線の期間設定 extern int MA_Shift = 0; // 移動平均を右にシフトするバー数の設定 extern int MA_Method = 0; // 移動平均方法の設定 extern double Lots = 1.0; // 取引ロット数 extern int Slip = 100; // 許容スリッページ数 extern string Comments = " "; // コメント // 変数の設定// int Ticket_L = 0; // 買い注文の結果をキャッチする変数 int Ticket_S = 0; // 売り注文の結果をキャッチする変数 int Exit_L = 0; // 買いポジションの決済注文の結果をキャッチする変数 int Exit_S = 0; // 売りポジションの決済注文の結果をキャッチする変数 double MA_2 = 0; double MA_1 = 0; int start() { MA_2 = iCustom(NULL,0,"Moving Averages",MA_Period,MA_Shift,MA_Method,0,2); MA_1 = iCustom(NULL,0,"Moving Averages",MA_Period,MA_Shift,MA_Method,0,1); // 買いポジションのエグジット if( MA_1 >= High[1] && ( Ticket_L != 0 && Ticket_L != -1 )) { Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red); if( Exit_L ==1 ) {Ticket_L = 0;} } // 売りポジションのエグジット if( MA_1 <= Low[1] && ( Ticket_S != 0 && Ticket_S != -1 )) { Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue); if( Exit_S ==1 ) {Ticket_S = 0;} } // 買いエントリー if( MA_2 <= MA_1 && MA_1 > Open[1]&& MA_1 > Close[1] && ( Ticket_L == 0 || Ticket_L == -1 ) && ( Ticket_S == 0 || Ticket_S == -1 )) { Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red); } // 売りエントリー if( MA_2 >= MA_1 && MA_1 < Open[1]&& MA_1 > Close[1] && ( Ticket_S == 0 || Ticket_S == -1 ) && ( Ticket_L == 0 || Ticket_L == -1 )) { Ticket_S = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,Comments,MAGIC,0,Blue); } return(0); }

みんなの回答

回答No.1

デモ口座のバックテストでもポジション取らないのかな? if ( Ticket_L != 0 && Ticket_L != -1 ) if ( Ticket_S != 0 && Ticket_S != -1 ) ポジション持っていたらの意味でしょ? ポジションを持っていたら エグジットロジックに行けばよい ポジションを持っていなかったらelseで エントリーロジックに行けばよい そうすることで、ポジションを取るIF文がスマートになるよ ポジションを取るIF文は簡素化したほうが良いからね IF文でAND(&&)とOR( || )をごちゃ混ぜにしない方が良いよ 見た目問題無さそうでも、そのIF分は絶対に通らないようなバグになってる時があるからね。 今は職場だから、家に帰って時間があったらまた連絡しますね。

katu160
質問者

お礼

ただいま帰宅し、、拝見させていただきました。御指導及びアドバイス大変ありがとうございます。後二日行けば休みなのでじっくりやってみます。ありがとうございます

関連するQ&A

  • MT4の勉強でつまりました

    前日の4本値とフィボナッチを利用して当日の売り買いを自動的に行なうプログラムを考えてみました。 しかし、書物を参考にしていることもあってか、うまくいきません。 仕事に出かける時間が早いので標準時間(夏;6:00 冬;7:00)にエントリーできません。 流れとして 標準時間にプログラムスタート→前日分を決済→計算式に基づいてエントリーする。 初心者に付き問題点をわかりやすくご指導ください。 //マジックナンバーの定義 #define MAGIC 7 //パラメーターの設定// extern double Lots = 1.0; //取引ロット数 extern int Slip = 10; //許容スリップページ数 extern string Comments = ""; //コメント //変数の設定// int Ticket_L = 0;//買い注文の結果をキャッチする変数 int Ticket_S = 0;//売り注文の結果をキャッチする変数 int Exit_L = 0; //買いポジションの決済注文の結果をキャッチする変数 int Exit_S = 0; //売りポジションの決済注文の結果をキャッチする変数 int start() { //買いポジションのエグジット { Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red); if(Exit_L == 1){Ticket_L =0;} } //売りポジションのエグジット { Exit_S = OrderClose(Ticket_S,Lots,Bid,Slip,Blue); if(Exit_S == 1){Ticket_S =0;} } //買いエントリー if(((iHigh("GBPJPY",1440,1)-iLow("GBPJPY",1440,1))*0.5+iLow("GBPJPY",1440,1))<((iOpen("GBPJPY",1440,1)+iClose("GBPJPY",1440,1))/2 { Ticket_L = OrderSend(Symbol(),OP_BUY, Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red); } //売りエントリー if(((iHigh("GBPJPY",1440,1)-iLow("GBPJPY",1440,1))*1.382+iLow("GBPJPY",1440,1))>((iOpen("GBPJPY",1440,1)+iClose("GBPJPY",1440,1))/2 { Ticket_L = OrderSend(Symbol(),OP_SELL, Lots,Bid,Slip,0,0,Comments,MAGIC,0,Blue); } return(0); }

  • 変数の定義もれ?

    稚拙なEAをつくってみました。変数が定義されていない箇所が一か所あるというエラーメッセージがでます。売りポジションのストップロスあたりのようなのですが、どこかわかりません。どなたかよろしくお願いいたします。(安易に聞くなと怒られそうですが、3日考えてもわかりません。よろしくお願いします。) ?????????????????????????????????????????????????????????????????????????? //パラメーターの設定// extern double Lots = 1.0; //取引ロット数 extern int Slip = 10; //許容スリッページ数 extern string Comments = ""; //コメント extern int TP =20 ; //利益確定ポイント数 extern int SL =15 ; //ストップロスポイント数 //変数の設定// int Ticket_L = 0; //買い注文の結果をキャッチする変数 int Ticket_S = 0; //売り注文の結果をキャッチする変数 int Exit_L = 0; //買いポジションの決済注文の結果をキャッチする変数 int Exit_S = 0; //売りポジションの決済注文の結果をキャッチする変数 double st_2_60 = 0; //60分足の2本前のバーのストキャスティクス double st_1_60 = 0; //60分足の1本前のバーのストキャスティクス double st_2_15 =0; //15分足の2本前のバーのストキャスティクス double st_1_15 =0; //15分足の1本前のバーのストキャスティクス double signal_2_60 =0; //60分足の2本前のバーのシグナル double signal_1_60 =0; //60分足の1本前のバーのシグナル double signal_2_15= 0; //15分足の2本前のバーのシグナル double signal_1_15= 0; //15分足の1本前のバーのシグナル int start() { st_2_60=iCustom(NULL,60,"Stochastic",5,3,3,0,100,0,2); st_1_60=iCustom(NULL,60,"Stochastic",5,3,3,0,100,0,1); st_2_15=iCustom(NULL,15,"Stochastic",5,3,3,0,100,0,2); st_1_15=iCustom(NULL,15,"Stochastic",5,3,3,0,100,0,1); signal_2_60=iCustom(NULL,60,"Stochastic",5,3,3,0,100,1,2); signal_1_60=iCustom(NULL,60,"Stochastic",5,3,3,0,100,1,1); signal_2_15=iCustom(NULL,15,"Stochastic",5,3,3,0,100,1,2); signal_1_15=iCustom(NULL,15,"Stochastic",5,3,3,0,100,1,1); //買いポジションの利益確定 OrderSelect(Ticket_L,SELECT_BY_TICKET); if( (OrderOpenPrice()+TP*Point<=Bid) &&(Ticket_L != 0 && Ticket_L != -1 )) { Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red); if( Exit_L ==1 ) {Ticket_L = 0;} } //売りポジションの利益確定 OrderSelect(Ticket_S,SELECT_BY_TICKET); if( (OrderOpenPrice()-TP*Point>=Ask) &&(Ticket_S!= 0 && Ticket_S != -1 )) { Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue); if( Exit_S==1 ) {Ticket_S = 0;} } //買いポジションのストップロス OrderSelect(Ticket_L,SELECT_BY_TICKET); if( (OrderOpenPrice()-SL*Point>=Bid) &&(Ticket_L!=0 && Ticket_L!=-1)) { Exit_L=OrderClose(Ticket_L,Lots,Bid,Slip,Red); if(Exit_L==1){Ticket_L=0;}   //売りポジションのストップロス OrderSelect(Ticket_S,SELECT_BY_TICKET); if( (OrderOpenPrice()+SL*Point<=Ask) &&(Ticket_S != 0 && Ticket_S != -1)) { Exit_S=OrderClose(Ticket_S,Lots,Ask,Slip,Blue); if(Exit_S==1){Ticket_S=0;} //買いポジションのエグジット if( st_1_15 <= 25 && Ticket_L != 0 && Ticket_L != -1) { Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red); if( Exit_L ==1 ) {Ticket_L = 0;} } //売りポジションのエグジット if( st_1_15 >=75 && Ticket_S != 0 && Ticket_S != -1 ) { Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue); if( Exit_S ==1 ) {Ticket_S = 0;} } //買いエントリー if( st_2_60 > 20 && st_1_60 > st_2_60 && st_1_60 < 70 && st_2_15 > 20 && st_1_15 > st_2_15 && st_1_15 < 70 && st_1_15 >= signal_1_15 && ( Ticket_L == 0 || Ticket_L == -1 ) && ( Ticket_S == 0 || Ticket_S == -1 )) { Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red); } //売りエントリー if( st_2_60 < 80 && st_1_60 < st_2_60 && st_1_60 >30 && st_2_15 < 80 && st_1_15 <= st_2_15 && st_1_15 <= signal_1_15 && ( Ticket_S == 0 || Ticket_S == -1 ) && ( Ticket_L == 0 || Ticket_L == -1 )) { Ticket_S = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,Comments,MAGIC,0,Blue); } return(0); } // the end.

  • mt4のプログラムについて

    プログラムのコンパイルは問題ありませんが、エラー130が出てバックテストが出来ない状況です。 原因を教えて頂けますか。 int start() { if(OrderTotal()==0){ ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,StopLoss,TakeProfit,Magic,0,Color) } //ordertotalがなければ成り行きでbuyを建てる if(OrdersTotal()==1){ if(OrderSelect(ticket,SELECT_BY_POS,MODETRADES)=1){ ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,OrderOpenPrice()-0.20*Point,Slippage,StopLoss,TakeProfit,Magic,0Color) } //ordertotalが1で、且つ約定ポジションと未約定ポジションの合計が1の場合、orderopenpriceから-20pip下がった所にsellstopの注文を入れる。 } 以上の様にeaを制作したところ、buyは問題なく建ちましたが、sellの注文がエラー130となり注文が出来ない状態です。 ポイントは20離しておりますので、ポイント制限には該当しておりません。 何故stop値が無効となるのでしょうか?

  • メタトレーダー

    初歩的な質問ですみませんが、どなたか教えてください。メタトレーダーのEAプログラムについてです。 (1) エントリー時に移動平均線の傾きの角度を制限したいので下記のようにしました。 extern double MA_Period = 20; // MAの足数 extern double kaikatamuki = 40; //買いのMA逆傾き制限(%)必ず99以下で extern double urikatamuki = 40; //売りのMA逆傾き制限(%)必ず99以下で ~ ここに色々式がありまして・・・・ ~ //MA傾きの計算 ma1 = iMA(NULL, 0, MA_Period,0, MODE_SMA, PRICE_CLOSE, j); ma2 = iMA(NULL, 0, MA_Period,0, MODE_SMA, PRICE_CLOSE, j+1); katamuki1 = ma1/ma2*100; katamuki2 = ma2/ma1*100; //katamuki1 = ma1-ma2;←これは差を求めるために作っただけ //katamuki2 = ma2-ma1; ←これは差を求めるために作っただけ //オープンポジションの計算 int pos = CalculateCurrentOrders(); //売りシグナル if (pos>=0 && k==llb && katamuki1<kaikatamuki) { ClosePositions(); OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+TrailingStop1*Point,Bid-TakeProfit*Point,””,MAGIC,0,Red); return(0); } //買いシグナル if (pos<=0 && k==hhb && katamuki2<urikatamuki) { ClosePositions(); OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-TrailingStop1*Point,Ask+TakeProfit*Point,””,MAGIC,0,Blue); return(0); } しかし、compileはできたのですが、実際のバックテストでは約定しません。kaikatamukiとurikatamukiを100以上にすれば約定するのですが、理屈が反対になるのでダメです。また、大きい傾き時のみのエントリーを計画しているのですが、傾きが緩やかな時も約定してしまいます。何が間違っているのでしょうか?または、傾きの有る無いしか作れないのでしょうか? (2)上記にあるOrderSendのStopLossの所にTrailingStopを最初から適用すると約定しません。StopLossを入れると約定します。上記ではTrailingStop1となっていますが、1をつけなくてもダメでした。私としてはOrderSendで TrailingStop を入れて、ある一定の利益が出たらOrderModifyで新たな TrailingStopを設定したいと思っていました。これはダメなんでしょうか? (3)上記とは違いますが例えば、Supersignalの矢印が出てから何本目の足以内にMACDCrossが出たらエントリーというような、「これが成立してから足何本以内にこれが成立したら」が書けません。forexでstatic int barsAtStart;を見つけましたが、これまた動きません。 長々と申し訳ありません。よろしくお願いいたします。

  • 初心者です。ポジションが上手く決済されません。

    FastMaとSlowMaのGC・DCでポジションを持ちSL・TPで決済したいのですが 反対のポジションを持ったときに決済してしまいます。 どこがダメなのでしょうか? 初歩的なことだと思いますが、一週間悩んでも分りませんでした。 よろしくお願いします。 //| パラメーター extern int FastMA_Period = 4; extern int SlowMA_Period = 8; extern double Lots = 0.1; extern int Slippage = 3; extern int SLpips = 150; // 損切り値幅(pips) extern int TPpips = 80; // 利食い値幅(pips) //| ポジションを決済する void ClosePositions() { for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break; if(OrderMagicNumber() != MAGIC || OrderSymbol() != Symbol()) continue; //オーダータイプのチェック if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,White); break; } if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,White); break; } } } //| スタート関数 int start() { //バーの始値でトレード可能かチェック if(Volume[0]>1 || IsTradeAllowed()==false) return(0); //移動平均の計算 double FastMA1 = iMA(NULL,0,FastMA_Period,0,MODE_SMA,PRICE_CLOSE,1); double SlowMA1 = iMA(NULL,0,SlowMA_Period,0,MODE_SMA,PRICE_CLOSE,1); double FastMA2 = iMA(NULL,0,FastMA_Period,0,MODE_SMA,PRICE_CLOSE,2); double SlowMA2 = iMA(NULL,0,SlowMA_Period,0,MODE_SMA,PRICE_CLOSE,2); //買いシグナル if(FastMA2 <= SlowMA2 && FastMA1 > SlowMA1) { ClosePositions(); OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-SLpips*Point,0,"",MAGIC,0,Blue); return(0); } //売りシグナル if(FastMA2 >= SlowMA2 && FastMA1 < SlowMA1) { ClosePositions(); OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+SLpips*Point,0,"",MAGIC,0,Red); return(0); } return(0); }

  • ポジションを同時に2個持つのを直したい

    //+------------------------------------------------------------------+ //| パラメータ | //+------------------------------------------------------------------+ extern string X = "Basic Settings"; //基本設定 extern int MagicNumber = 10011; //マジックナンバー extern double TakeProfit = 200; //リミット[pips] extern double StopLoss = 150; //ストップ[pips] extern double Lots = 0.1; //ロットサイズ extern int Cmd = OP_BUY; //エントリー方法[OP_BUY/OP_SELL] extern int Slippage = 30; //スリッページ extern string XX = "Order Settings"; //新規注文設定 extern bool CheckOrderHour = true; //時間の判定有無 extern int OrderHour = 7; //時間 extern bool CheckOrderMinute = true; //分の判定有無 extern int OrderMinute = 5; //分 extern bool CheckOrderSeconds = true; //秒の判定有無 extern int OrderSeconds = 0; //秒 extern string XXX = "Close Settings"; //決済注文設定 extern bool CheckCloseHour = true; //時間の判定有無 extern int CloseHour = 7;//時 //時間 extern bool CheckCloseMinute = true; //分の判定有無 extern int CloseMinute = 40;//分 //分 extern bool CheckCloseSeconds = true; //秒の判定有無 extern int CloseSeconds = 0;//秒 //秒 //+------------------------------------------------------------------+ //| 開始関数 | //+------------------------------------------------------------------+ int start() { if((TimeHour(TimeCurrent()) == OrderHour || CheckOrderHour == false) &&(TimeMinute(TimeCurrent()) == OrderMinute || CheckOrderMinute == false) &&(TimeSeconds(TimeCurrent()) == OrderSeconds || CheckOrderSeconds == false)) { if(Cmd == OP_BUY){ OrderSend(Symbol(), Cmd,Lots, Ask, Slippage, Ask-StopLoss*Point, Ask+TakeProfit*Point, "", MagicNumber, 0, Red); return(0); } if(Cmd == OP_SELL){ OrderSend(Symbol(), Cmd,Lots, Bid, Slippage, Bid+StopLoss*Point, Bid-TakeProfit*Point, "", MagicNumber, 0, Blue); return(0); } } if((TimeHour(TimeCurrent()) == CloseHour || CheckCloseHour == false) &&(TimeMinute(TimeCurrent()) == CloseMinute || CheckCloseMinute == false) &&(TimeSeconds(TimeCurrent()) == CloseSeconds || CheckCloseSeconds == false)) { for(int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) { break; } if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if(OrderType() == OP_BUY) { OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Yellow); return(0); } if(OrderType() == OP_SELL) { OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Lime); return(0); } } } } return(0); }

  • 一日2回ポジションを持つにはどうしたらいいですか?

    以前に、質問投稿した事があります。火曜から金曜日まで動かして、一日に2回だけ売買するにはどうすればいいのかわからなくて困ってます。宜しくお願いします。 --------------------------------------------------- extern string X = "Basic Settings"; //基本設定 extern int MagicNumber = 10011; //マジックナンバー extern double TakeProfit = 200; //リミット[pips] extern double StopLoss = 150; //ストップ[pips] extern double Lots = 0.1; //ロットサイズ extern int Cmd = OP_BUY; //エントリー方法[OP_BUY/OP_SELL] extern int Slippage = 30; //スリッページ extern string XX = "Order Settings"; //新規注文設定 extern bool CheckOrderDayOfWeek = false; //曜日の判定有無 extern int OrderDayOfWeek = 1; //曜日 extern bool CheckOrderHour = true; //時間の判定有無 extern int OrderHour = 7; //時間 extern bool CheckOrderMinute = true; //分の判定有無 extern int OrderMinute = 5; //分 extern bool CheckOrderSeconds = true; //秒の判定有無 extern int OrderSeconds = 0; //秒 extern string XXX = "Close Settings"; //決済注文設定 extern bool CheckCloseHour = true; //時間の判定有無 extern int CloseHour = 7;//時 //時間 extern bool CheckCloseMinute = true; //分の判定有無 extern int CloseMinute = 40;//分 //分 extern bool CheckCloseSeconds = true; //秒の判定有無 extern int CloseSeconds = 0;//秒 //秒 //+------------------------------------------------------------------+ //| 開始関数 | //+------------------------------------------------------------------+ int start() { if(OrdersTotal() == 0){ if((TimeDayOfWeek(TimeCurrent()) == OrderDayOfWeek || CheckOrderDayOfWeek == false) &&(TimeHour(TimeCurrent()) == OrderHour || CheckOrderHour == false) &&(TimeMinute(TimeCurrent()) == OrderMinute || CheckOrderMinute == false) &&(TimeSeconds(TimeCurrent()) == OrderSeconds || CheckOrderSeconds == false)) { if(Cmd == OP_BUY){ OrderSend(Symbol(), Cmd,Lots, Ask, Slippage, Ask-StopLoss*Point, Ask+TakeProfit*Point, "", MagicNumber, 0, Red); return(0); } if(Cmd == OP_SELL){ OrderSend(Symbol(), Cmd,Lots, Bid, Slippage, Bid+StopLoss*Point, Bid-TakeProfit*Point, "", MagicNumber, 0, Blue); return(0); } } } if((TimeDayOfWeek(TimeCurrent()) == OrderDayOfWeek || CheckOrderDayOfWeek == false) &&(TimeHour(TimeCurrent()) == CloseHour || CheckCloseHour == false) &&(TimeMinute(TimeCurrent()) == CloseMinute || CheckCloseMinute == false) &&(TimeSeconds(TimeCurrent()) == CloseSeconds || CheckCloseSeconds == false)) { for(int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) { break; } if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if(OrderType() == OP_BUY) { OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Yellow); return(0); } if(OrderType() == OP_SELL) { OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Lime); return(0); } } } } return(0); }

  • MT4のSendOrderについて

    最近MetaTrader4(MT4)に興味を持ち始めたものです。 早速試しに簡単なEAを作ってみているのですが、 OrderSendを行う際に思う様に約定できずこまっています。 詳細としてはOrderSendにて、成行注文と同時に利益確定注文、 損切り注文をだしていますが、常にチケットが「-1」で約定する気配がありません。 問題となっている部分は利益確定と損切り注文の部分である可能性が非常に高いです。 通貨:EUR/USD デモ口座:OLD、Forex ※OLDは成行注文と利益確定、損切りを同時に出せない? 一部買い注文する部分のソースを抜粋します。 //損切、利確用変数初期化 double TakeProfit = 0.0020; double StopLoss = 0.0015; //現在の終値より損切、利確の値の計算 TakeProfit = Close[0] + TakeProfit; StopLoss = Close[0] - StopLoss; //注文 Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,10,StopLoss,TakeProfit,Comments,MAGIC,0,Red); ちなみに「利益確定と損切り注文の部分である可能性が非常に高い」の理由としては 以下の様に、利益確定と損切りをしない注文を行うと正常に約定されるためです。 Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,Comments,MAGIC,0,Red); 利益確定と損切り注文が取得ポジションに近すぎるのかな?とも少しおもっているのですが、 ストップレベルという値を取得するとわかるみたいな情報があったので、取得してみると、 「ストップレベル:1.00000000」この値についてもどう解釈すればよいのかが不明です。 この内容で質問として情報が足りているか少し不安ですが、ご教授お願いします。 (その他、実際のMT4口座選で、ここはオススメなどあれば教えてもらえるとうれしいです。)

  • MT4 MACD

    下記、MACDのプログラムですが、MACDラインとSignalラインがクロスした際、(1)-(3)の条件を満たす、プログラム変更を、どなたか、詳しい方教えてください。 (1)Alertを鳴らす (2)Soundを1度鳴らす (3)Soundを鳴らし続ける #property copyright "Copyright(C) 2005 S.B.T. All Rights Reserved." #property link "http://sufx.core.t3-ism.net/" //---- indicator settings #property indicator_separate_window #property indicator_buffers 4 #property indicator_color1 MediumSeaGreen #property indicator_color2 DarkOrange #property indicator_color3 Crimson #property indicator_color4 SteelBlue //---- indicator parameters extern int FastMA=12; extern int SlowMA=26; extern int MA_Method=1; extern int SignalMA=9; extern int SignalMA_Method=1; extern int Apply=0; extern int Timeframe=0; //---- indicator buffers double ind_buffer1[]; double ind_buffer2[]; double ind_buffer3[]; double ind_buffer4[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name1,short_name2,short_name3; //---- drawing settings SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID); SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID); SetIndexDrawBegin(1,SignalMA); IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1); //---- indicator buffers mapping if(!SetIndexBuffer(0,ind_buffer1) && !SetIndexBuffer(1,ind_buffer2) && !SetIndexBuffer(2,ind_buffer3) && !SetIndexBuffer(3,ind_buffer4)) Print("cannot set indicator buffers!"); //---- name for DataWindow and indicator subwindow label switch(MA_Method) { case 1 : short_name1="EMA("; break; case 2 : short_name1="SMMA("; break; case 3 : short_name1="LWMA("; break; default : MA_Method=0; short_name1="SMA("; } switch(SignalMA_Method) { case 1 : short_name2="EMA("; break; case 2 : short_name2="SMMA("; break; case 3 : short_name2="LWMA("; break; default : SignalMA_Method=0; short_name2="SMA("; } switch(Apply) { case 1 : short_name3="Apply to Open price"; break; case 2 : short_name3="Apply to High price"; break; case 3 : short_name3="Apply to Low price"; break; case 4 : short_name3="Apply to Median price, (high+low)/2"; break; case 5 : short_name3="Apply to Typical price, (high+low+close)/3"; break; case 6 : short_name3="Apply to Weighted close price, (high+low+close+close)/4"; break; default : Apply=0; short_name3="Apply to Close price"; } IndicatorShortName("MACD("+short_name1+FastMA+"),"+short_name1+SlowMA+"),"+short_name2+SignalMA+")) "+short_name3); SetIndexLabel(0,"Oscillator"); SetIndexLabel(1,"Oscillator"); SetIndexLabel(2,"Signal"); SetIndexLabel(3,"MACD"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Moving Averages Convergence/Divergence | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars=IndicatorCounted(); //---- check for possible errors if(counted_bars<0) return(-1); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- macd counted in the 1-st buffer for(int i=0; i<limit; i++) { ind_buffer4[i]=iMA(NULL,Timeframe,FastMA,0,MA_Method,Apply,i)-iMA(NULL,Timeframe,SlowMA,0,MA_Method,Apply,i); } //---- signal line counted in the 2-nd buffer for(i=0; i<limit; i++) { ind_buffer3[i]=iMAOnArray(ind_buffer4,Bars,SignalMA,0,SignalMA_Method,i); } //---- done //---- signal line counted in the 3-rd buffer for(i=0; i<limit; i++) { ind_buffer1[i]=ind_buffer4[i]-ind_buffer3[i]; } for(i=0; i<limit-1; i++) { if (ind_buffer1[i]<ind_buffer1[i+1]) ind_buffer2[i]=ind_buffer1[i]; else ind_buffer2[i]=0; } //---- done return(0); }

  • MT4 BBandWidthRatio(VT系)

    fhat6014様 この質問の前にADXのMTF化の質問をしているのですが、貴殿に以前紹介頂いた、BBandWidthRatioのVT系のインジケータもMTF化できるのでしょうか?現在、紹介頂いたサイトからインジケータが削除されているため、プログラムを記載させて頂きます。可能であれば、教えていただけないでしょうか。 #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Purple #property indicator_color2 Blue #property indicator_color3 Red #property indicator_style2 STYLE_DOT #property indicator_style3 STYLE_DOT #property indicator_minimum 0 //---- input parameters extern int BB_Period=18; extern double Deviation=2.0; extern int Bulgeper=150; extern int Squeezeper=150; double buf1[]; //double buf2[]; //double buf3[]; //double buf4[]; double bufBulgeper[]; double bufSqueezeper[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorDigits(MarketInfo(Symbol(), MODE_DIGITS)); SetIndexDrawBegin(0,BB_Period); SetIndexLabel(0,"BBandWidthRatio"); SetIndexBuffer(0, buf1); SetIndexDrawBegin(1,BB_Period); SetIndexLabel(1,"Bulgeper"); SetIndexBuffer(1, bufBulgeper); SetIndexDrawBegin(2,BB_Period); SetIndexLabel(2,"Squeezeper"); SetIndexBuffer(2, bufSqueezeper); return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i, j; double ave, sko, sum; int counted_bars=IndicatorCounted(); double MA, Up, Dn; if(Bars<=BB_Period) return(0); if(BB_Period==0) return(0); int limit = Bars - counted_bars; for (i=limit-1; i>=0; i--) { // buf2[i] = iMA(NULL,0,BB_Period,0,MODE_SMA,PRICE_CLOSE,i); MA = iMA(NULL,0,BB_Period,0,MODE_SMA,PRICE_CLOSE,i); sum = 0; for (j=0; j<BB_Period; j++) sum+=Close[i+j]; ave = sum / BB_Period; sum = 0; for (j=0; j<BB_Period; j++) sum+=(Close[i+j]-ave)*(Close[i+j]-ave); sko = MathSqrt(sum / BB_Period); // buf4[i] = buf2[i]+(Deviation*sko); // buf3[i] = buf2[i]-(Deviation*sko); Up = MA+(Deviation*sko); Dn = MA-(Deviation*sko); // buf1[i] = 2*(Deviation*sko)/buf2[i]; if( MA != 0 ){ buf1[i] = 2*(Deviation*sko)/MA; bufBulgeper[i] = buf1[ArrayMaximum(buf1,Bulgeper,i)]; bufSqueezeper[i] = buf1[ArrayMinimum(buf1,Squeezeper,i)]; } } return(0); }