コーディングの方法は? - ページ 267 1...260261262263264265266267268269270271272273274...347 新しいコメント ixbone 2011.07.24 14:09 #2661 christinaLi: 私はあなたが話しているこの関数を手助けしたいのですが、それは私があなたのロジックを単に理解することができないようです。これは戦略の他のロジックとは全く関係ありません。単純にこれが知りたいのです。 1.4110で1ロット買い、1.4200で2ロット売りの場合。どのような価格で6pipsの利益を得たとお考えですか? クリスティーナさん、こんにちは。 私のポジション管理では、1つの買いロットが利益でクローズした後、2つの売りロットがオープンされることはありません(最初の買いロットが利益でクローズしたので、次のシグナルを待ちます)。 あなたの例に戻ります。 しかし、約1.4175にラインがあり、そこでは2つの売りロット(利益アップ、マーケットダウン)と1つの買いロット(利益ダウン、マーケットダウン)が同価格(ブレークイーブン0)なので、1.4169で6ピップの利益が準備できます - 次に私はすべての注文を閉じます。 IX Min Li 2011.07.24 15:04 #2662 ixbone: こんにちは、Christinaさん。 私のポジション管理では、1つの買いロットが利益でクローズした後、2つの売りロットがオープンされることはありません(最初の買いロットが利益でクローズしたので、次のシグナルを待ちます)。 あなたの例に戻ります。 しかし、約1.4175にラインがあり、そこでは2つの売りロット(利益アップ、マーケットダウン)と1つの買いロット(利益ダウン、マーケットダウン)が同価格(ブレークイーブン0)なので、1.4169で6ピップの利益が準備されています - その後、私はすべての注文を閉じます。 IX 私の例は、1.4110と1.4200だからです。以下は私の計算です。 まず、1.4170で(スプレッドを考慮しない)収支は均衡します。ここで、30pipsの利益で2ロットの売りと60pipsの損失で1ロットの買いがあり、ドル建てでは収支トントンです。 私の例と全く同じであれば、1.4164で全体で6pipsの利益があるはずです。 1.4164(スプレッドを考慮しない)では、36pipsの利益で売り2ロット、54pipsの損失で買い1ロットなので、売りから72pipsの利益と買いから54pipsの損失があります。トレードのグループ全体では、3ロットで18ピップの利益となります。ですから、今は6ピップスの利益があると考える方が妥当です。 しかし、スプレッドの関係でまたまたややこしいことになります。なぜなら、bidが1.4164でaskが1.4166の場合、売りはそれぞれ34pipsの利益しか得られないからです。このトレードのグループ全体では、14 pipsの利益で3ロットを持っています。つまり、実際には4.7ピップスの利益があります。 この例をさらに一歩進めて、2つの買いと3つの売りがある場合です。すると、1.4164で収支が合うことになります。 スプレッドを考慮しない場合、各ロットで5pipsの利益を得るには、合計30pipsの利益が必要です。つまり、6pipsの利益は1.4134の価格で発生することになりますが、これは正しいでしょうか? あなたのシステムではおそらくこのような状況はないでしょう、私が得たいのはこの原理です。上記の計算に同意しますか? ixbone 2011.07.24 15:32 #2663 christinaLi: 私の例は1.4110と1.4200だからです。以下は私の計算です。まず、1.4170(スプレッドは考慮せず)でブレイクイーブンです。現在、30pipsの利益で2ロットの売り、60pipsの損失で1ロットの買いがあり、ドルベースで収支は均衡しています。 私の例と全く同じであれば、1.4164で全体で6pipsの利益があるはずです。 1.4164(スプレッドを考慮しない)では、36pipsの利益で売り2ロット、54pipsの損失で買い1ロットなので、売りから72pipsの利益と買いから54pipsの損失があります。トレードのグループ全体では、3ロットで18ピップの利益となります。ですから、今は6ピップスの利益があると考える方が妥当です。 しかし、スプレッドの関係でまたまたややこしいことになります。なぜなら、bidが1.4164でaskが1.4166の場合、売りはそれぞれ34pipsの利益しか得られないからです。このトレードのグループ全体では、14 pipsの利益で3ロットを持っています。つまり、実際には4.7ピップスの利益があります。 この例をさらに一歩進めて、2つの買いと3つの売りがある場合です。すると、1.4164で収支が合うことになります。 スプレッドを考慮しない場合、各ロットで5pipsの利益を得るには、合計30pipsの利益が必要です。つまり、6pipsの利益は1.4134の価格で得られることになりますが、これは正しいでしょうか? あなたのシステムでは、おそらくこのような状況はないでしょう。それは、私が得たい原理です。あなたは上記の計算に同意しますか? Christina, そうですね、どちらの計算も100%正しいです。 Min Li 2011.07.25 22:10 #2664 こんにちは、マイケル。 ここ2、3日忙しくて、すでにやったんだけど、まとめるのにもっと時間が必要なんだ。数日中に時間を見つけて、ここに掲載するつもりです。クリスティナ 削除済み 2011.07.26 03:11 #2665 ixbone 2011.07.26 10:33 #2666 christinaLi: こんにちは、マイケル。ここ2、3日忙しすぎて、すでにやったのですが、まとめるのにもっと時間が必要です。数日中に時間を見つけて、ここに掲載する予定です。クリスティナ クリスティーナさん、こんにちは。 ご心配なく、ごゆっくりどうぞ。 マイケル xlsander 2011.07.26 18:39 #2667 gold2008 2011.07.27 11:52 #2668 助けてほしい 皆さん、こんにちは。 これは私のアイデアです:私はseparate_windowに2つのインジケータバッファが 必要です、1つはdevupBuffer[]です、2つはdevdwBuffer[]です。例えば、5つのデジタル1,2,3,4,5があり、それらの平均が3であるとします。この場合、データは3,4,5の平均より大きい devupBuffer={【(4-平均)*(4-平均)】。標準偏差(1,2,3,4,5)*標準偏差(1,2,3,4,5)です。データが 3 1 と 2 の平均より小さい devdwBuffer={【(1-平均)*(1-平均)】。+【(2-平均)*(2-平均)】}/標準偏差(1,2,3,4,5)*標準偏差(1,2,3,4,5). 削除済み 2011.07.28 09:51 #2669 なぜこのEAは売買ができないのでしょうか? こんにちは、私はMetaでプログラミングをするのは本当に初めてです。 私は25と75の2つのレベルを持つストキャスティクスのシステムで作業しています... 一回の取引だけです。 メインとシグナルの両方が25より下でクロスした場合、買い。 もしメインとシグナルが25より上でクロス したら、クローズ買い。 もし、メインとシグナルが共に75より上でクロスしたら、売り。 メインとシグナルがクロスしたら(75以下である必要はない)、CLOSE SELL。 ということです。 //+------------------------------------------------------------------+ //| StochCross.mq4 | //| RobertEli | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "RobertEli" #property link "http://www.metaquotes.net" //--- input parameters extern double TakeProfit=250.0; extern double Lots=0.01; extern double TrailingStop=35.0; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } int Confirm (double line1, double line2, int level_buy, int level_sell) { static int confirmation = 0; if ((line1 < level_buy) && (line2 < level_buy)) confirmation = 1; //confirm BUY, when two lines are below level_buy if ((line1 > level_sell) && (line2 > level_sell)) confirmation = 2; //confirm SELL, when two lines are above level_sell if ((line1 > level_buy) && (line2 > level_buy)) confirmation = 3; //confirm CLOSE BUY, when two lines are above level_buy if ((line1 < level_sell) && (line2 < level_sell)) confirmation = 4; //confirm CLOSE SELL, when two lines are below level_sell //if ((line1 > level_buy_close) && (line2 > level_buy_close)) confirmation = 3; //confirm CLOSE BUY //if ((line1 < level_sell_close) && (line2 < level_sell_close)) confirmation = 4; //confirm CLOSE SELL //else return (0); return (confirmation); } int Crossed (double line1, double line2) { static int last_direction = 0; static int current_direction = 0; if (line1 > line2) current_direction = 1; //UP if (line1 < line2) current_direction = 2; //DOWN if (current_direction != last_direction) //changed direction { last_direction = current_direction; return (last_direction); } else { return (0); } } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- int cnt, ticket; double Stoch_main, Stoch_sign; if (Bars < 100) { Print("BARS less than 100"); return (0); } if (TakeProfit < 10) { Print("TakeProfit less than 10"); return (0); } /* Stoch_main = iStochastic (NULL,15,21,8,13,MODE_SMA,1,MODE_MAIN,0); Stoch_sign = iStochastic (NULL,15,21,8,13,MODE_SMA,1,MODE_SIGNAL,0); */ Stoch_main = iStochastic (NULL,0,30,20,12,MODE_SMA,1,MODE_MAIN,0); Stoch_sign = iStochastic (NULL,0,30,20,12,MODE_SMA,1,MODE_SIGNAL,0); /* Stoch_main = iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0); Stoch_sign = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0); */ int isCrossed = Crossed(Stoch_main,Stoch_sign); int isConfirmed = Confirm(Stoch_main,Stoch_sign,25,75); int total = OrdersTotal(); if (total == 0) { if ((isCrossed == 1) && (isConfirmed == 1)) { ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"Buy at " + Ask,24848,0,Green); if (ticket > 0) { if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY Order opened: " +Ask ,OrderOpenPrice()); else Print ("Error Opening BUY Order: ", GetLastError()); return (0); } } if ((isCrossed == 2) && (isConfirmed == 2)) { ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"Sell at " + Bid,24848,0,Red); if (ticket > 0) { if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL Order opened: " +Bid ,OrderOpenPrice()); else Print ("Error Opening SELL Order: ", GetLastError()); return (0); } } return (0); } else { for (cnt = total; cnt < 0; cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderType() <= OP_SELL && OrderSymbol() == Symbol()) { if (OrderType() == OP_BUY) //the trade was a Buy position { //check for closing) if ((isCrossed == 2) && (isConfirmed == 3)) //if (isCrossed == 2) { //change of direction OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //close Buy position return (0); } } else // the trade was a SELL position { //should it be closed? //if ((isCrossed == 1) && (isConfirmed == 4)) if (isCrossed == 1) //Closing the SELL need not to be below the level_buy... it's very dangerous to wait for it... { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //Sell position is now closed return (0); } } } } } //---- return(0); } //+------------------------------------------------------------------+ How to code? 絵馬クロス! EAへのパスワード保護 削除済み 2011.07.30 09:35 #2670 EAが想定したとおりの動作をしません。 こんにちは、私はmq4プログラミングの初心者ですが、codersgurusチュートリアルを読みました(本当にありがとうございます!)ので、何か理解できると思います。しかし、移動平均をベースにしたEAを作ったのですが...ひどくうまくいきません。 このルールは非常にシンプルです。 1.MA_04_1H(1時間 足の移動平均期間4を意味する)がMA_14_1Hの上をクロスする。 MA_04_4HがMA_14_4Hを上回ったことを確認する(トレンドは上向き) ------> BUY! 2.MA_04_1HがMA_14_1Hの下を横切る。 MA_04_4HがMA_14_4Hを下回ることを確認(トレンドは下降) ------> SELL! 3. MA_04_1HがMA_14_1Hとクロスしたら、その注文を決済する(ルール1と2を考えると、新しい注文を開始することができる) 4. 1つの取引のみ...(BUYならそのBUYをクローズ。その後、必要ならSELL) 2つの関数を作りました。CrossedとConfirmedの2つの機能を作りました。 Crossedは1時間足、Confirmedは4時間足です。 Confirmedは4時間足のものです。 どなたかデバッグを手伝っていただけませんか? //+------------------------------------------------------------------+ //| MACross1TradeOnly.mq4 | //| RobertEli | //| | //+------------------------------------------------------------------+ // this will work on MA_04, and MA__14 #property copyright "RobertEli" #property link "" extern double Lots = 0.01; extern int stoploss_value = 10; // $10 bool up = 0, //UP direction, when MA_04 is above MA_14 down = 0, //DOWN direction, when MA_14 is above MA_04 change = 0, //when the MA_04 and MA_14 cross firsttime = true; //first time for direction_prev int direction_curr = 0; // 1 if UP, 2 if down... int direction_prev = 0; // this will hold previous value of direction_curr int direction_trend= 0; // trend direction for confirmation int cross = 0; // if direction_curr and direction_prev changes course //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } int Crossed (double line1, double line2) { static int last_direction = 0; static int current_direction = 0; if (line1 - line2 > 0)//(line1 > line2) { current_direction = 1; //UP if (firsttime == true) { current_direction = 0; last_direction = 1; firsttime = false; return (0); } } if (line1 - line2 < 0)//(line1 < line2) { current_direction = 2; //DOWN if (firsttime == true) { current_direction = 0; last_direction = 2; firsttime = false; return (0); } } if ((current_direction != last_direction) && (firsttime == false)) //changed direction { last_direction = current_direction; return (last_direction); } else { return (last_direction); } } int Confirmed (double line1, double line2) { int trend; if (line1 > line2) trend = 1; // trend direction is UP if (line1 < line2) trend = 2; // trend direction is DOWN return (trend); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- int cnt,ticket, total; //double MA_04, MA_07 , MA_14 , MA_21 , MA_28; //MOVING AVERAGES with their corresponding period if (Bars < 100) { Print ("Bars less than 100."); return (0); } double MA_04_1H = iMA(NULL,60,04,0,MODE_EMA,PRICE_CLOSE,0); double MA_14_1H = iMA(NULL,60,14,0,MODE_EMA,PRICE_CLOSE,0); double MA_04_4H = iMA(NULL,240,04,0,MODE_EMA,PRICE_CLOSE,0); double MA_14_4H = iMA(NULL,240,14,0,MODE_EMA,PRICE_CLOSE,0); //double stoploss = stoploss_value / (Lots * 100000); //new code from v_1 cross = Crossed (MA_04_1H,MA_14_1H); // =1 for UP, =2 for DOWN direction_trend = Confirmed (MA_04_4H, MA_14_4H); // =1 for UP, =2 for DOWN total = OrdersTotal(); if (total == 0) { if((cross == 1) && (direction_trend == 1)) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,/*Ask-stoploss*/0,0,"Buy at: "+ Ask,12345,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice(),",<<<<",OrderStopLoss()); } else Print("Error opening BUY order : ",GetLastError()); cross = 0; return(0); } if((cross == 2) && (direction_trend == 2)) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,/*Bid+stoploss*/0,0,"Sell at: "+ Bid,12345,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } else Print("Error opening SELL order : ",GetLastError()); cross = 0; return(0); } } if (total == 1) { for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); // bool no_buy_sell = ((OrderTakeProfit() 0)); if ((OrderType()==OP_BUY) && (cross == 2) )// && (no_buy_sell)) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position //OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+stoploss,0,"Sell at: "+ Bid,12345,0,Red); return (0); } else if ((OrderType()==OP_SELL) && (cross == 1) )// && (no_buy_sell)) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position //OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-stoploss,0,"Buy at: "+ Ask,12345,0,Green); return (0); } } } else return (0); //---- return(0); } //+------------------------------------------------------------------+ 前の投稿は無視してください...私はそのアイデアをゴミ箱に捨てました...私は今これに取り組んでいます...だから、助けてください... How to code? 絵馬クロス! Trailing stop in my 1...260261262263264265266267268269270271272273274...347 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
私はあなたが話しているこの関数を手助けしたいのですが、それは私があなたのロジックを単に理解することができないようです。これは戦略の他のロジックとは全く関係ありません。
単純にこれが知りたいのです。
1.4110で1ロット買い、1.4200で2ロット売りの場合。どのような価格で6pipsの利益を得たとお考えですか?クリスティーナさん、こんにちは。
私のポジション管理では、1つの買いロットが利益でクローズした後、2つの売りロットがオープンされることはありません(最初の買いロットが利益でクローズしたので、次のシグナルを待ちます)。
あなたの例に戻ります。
しかし、約1.4175にラインがあり、そこでは2つの売りロット(利益アップ、マーケットダウン)と1つの買いロット(利益ダウン、マーケットダウン)が同価格(ブレークイーブン0)なので、1.4169で6ピップの利益が準備できます - 次に私はすべての注文を閉じます。
IX
こんにちは、Christinaさん。
私のポジション管理では、1つの買いロットが利益でクローズした後、2つの売りロットがオープンされることはありません(最初の買いロットが利益でクローズしたので、次のシグナルを待ちます)。
あなたの例に戻ります。
しかし、約1.4175にラインがあり、そこでは2つの売りロット(利益アップ、マーケットダウン)と1つの買いロット(利益ダウン、マーケットダウン)が同価格(ブレークイーブン0)なので、1.4169で6ピップの利益が準備されています - その後、私はすべての注文を閉じます。
IX私の例は、1.4110と1.4200だからです。以下は私の計算です。
まず、1.4170で(スプレッドを考慮しない)収支は均衡します。ここで、30pipsの利益で2ロットの売りと60pipsの損失で1ロットの買いがあり、ドル建てでは収支トントンです。
私の例と全く同じであれば、1.4164で全体で6pipsの利益があるはずです。
1.4164(スプレッドを考慮しない)では、36pipsの利益で売り2ロット、54pipsの損失で買い1ロットなので、売りから72pipsの利益と買いから54pipsの損失があります。トレードのグループ全体では、3ロットで18ピップの利益となります。ですから、今は6ピップスの利益があると考える方が妥当です。
しかし、スプレッドの関係でまたまたややこしいことになります。なぜなら、bidが1.4164でaskが1.4166の場合、売りはそれぞれ34pipsの利益しか得られないからです。このトレードのグループ全体では、14 pipsの利益で3ロットを持っています。つまり、実際には4.7ピップスの利益があります。
この例をさらに一歩進めて、2つの買いと3つの売りがある場合です。すると、1.4164で収支が合うことになります。
スプレッドを考慮しない場合、各ロットで5pipsの利益を得るには、合計30pipsの利益が必要です。つまり、6pipsの利益は1.4134の価格で発生することになりますが、これは正しいでしょうか?
あなたのシステムではおそらくこのような状況はないでしょう、私が得たいのはこの原理です。上記の計算に同意しますか?
私の例は1.4110と1.4200だからです。以下は私の計算です。
まず、1.4170(スプレッドは考慮せず)でブレイクイーブンです。現在、30pipsの利益で2ロットの売り、60pipsの損失で1ロットの買いがあり、ドルベースで収支は均衡しています。
私の例と全く同じであれば、1.4164で全体で6pipsの利益があるはずです。
1.4164(スプレッドを考慮しない)では、36pipsの利益で売り2ロット、54pipsの損失で買い1ロットなので、売りから72pipsの利益と買いから54pipsの損失があります。トレードのグループ全体では、3ロットで18ピップの利益となります。ですから、今は6ピップスの利益があると考える方が妥当です。
しかし、スプレッドの関係でまたまたややこしいことになります。なぜなら、bidが1.4164でaskが1.4166の場合、売りはそれぞれ34pipsの利益しか得られないからです。このトレードのグループ全体では、14 pipsの利益で3ロットを持っています。つまり、実際には4.7ピップスの利益があります。
この例をさらに一歩進めて、2つの買いと3つの売りがある場合です。すると、1.4164で収支が合うことになります。
スプレッドを考慮しない場合、各ロットで5pipsの利益を得るには、合計30pipsの利益が必要です。つまり、6pipsの利益は1.4134の価格で得られることになりますが、これは正しいでしょうか?
あなたのシステムでは、おそらくこのような状況はないでしょう。それは、私が得たい原理です。あなたは上記の計算に同意しますか?Christina,
そうですね、どちらの計算も100%正しいです。
こんにちは、マイケル。
ここ2、3日忙しくて、すでにやったんだけど、まとめるのにもっと時間が必要なんだ。数日中に時間を見つけて、ここに掲載するつもりです。クリスティナ
こんにちは、マイケル。ここ2、3日忙しすぎて、すでにやったのですが、まとめるのにもっと時間が必要です。数日中に時間を見つけて、ここに掲載する予定です。クリスティナ
クリスティーナさん、こんにちは。
ご心配なく、ごゆっくりどうぞ。
マイケル
助けてほしい
皆さん、こんにちは。
これは私のアイデアです:私はseparate_windowに2つのインジケータバッファが 必要です、1つはdevupBuffer[]です、2つはdevdwBuffer[]です。例えば、5つのデジタル1,2,3,4,5があり、それらの平均が3であるとします。この場合、データは3,4,5の平均より大きい devupBuffer={【(4-平均)*(4-平均)】。標準偏差(1,2,3,4,5)*標準偏差(1,2,3,4,5)です。データが 3 1 と 2 の平均より小さい devdwBuffer={【(1-平均)*(1-平均)】。+【(2-平均)*(2-平均)】}/標準偏差(1,2,3,4,5)*標準偏差(1,2,3,4,5).
なぜこのEAは売買ができないのでしょうか?
こんにちは、私はMetaでプログラミングをするのは本当に初めてです。
私は25と75の2つのレベルを持つストキャスティクスのシステムで作業しています...
一回の取引だけです。
メインとシグナルの両方が25より下でクロスした場合、買い。
もしメインとシグナルが25より上でクロス したら、クローズ買い。
もし、メインとシグナルが共に75より上でクロスしたら、売り。
メインとシグナルがクロスしたら(75以下である必要はない)、CLOSE SELL。
ということです。
//| StochCross.mq4 |
//| RobertEli |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "RobertEli"
#property link "http://www.metaquotes.net"
//--- input parameters
extern double TakeProfit=250.0;
extern double Lots=0.01;
extern double TrailingStop=35.0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
int Confirm (double line1, double line2, int level_buy, int level_sell)
{
static int confirmation = 0;
if ((line1 < level_buy) && (line2 < level_buy)) confirmation = 1; //confirm BUY, when two lines are below level_buy
if ((line1 > level_sell) && (line2 > level_sell)) confirmation = 2; //confirm SELL, when two lines are above level_sell
if ((line1 > level_buy) && (line2 > level_buy)) confirmation = 3; //confirm CLOSE BUY, when two lines are above level_buy
if ((line1 < level_sell) && (line2 < level_sell)) confirmation = 4; //confirm CLOSE SELL, when two lines are below level_sell
//if ((line1 > level_buy_close) && (line2 > level_buy_close)) confirmation = 3; //confirm CLOSE BUY
//if ((line1 < level_sell_close) && (line2 < level_sell_close)) confirmation = 4; //confirm CLOSE SELL
//else return (0);
return (confirmation);
}
int Crossed (double line1, double line2)
{
static int last_direction = 0;
static int current_direction = 0;
if (line1 > line2) current_direction = 1; //UP
if (line1 < line2) current_direction = 2; //DOWN
if (current_direction != last_direction) //changed direction
{
last_direction = current_direction;
return (last_direction);
}
else
{
return (0);
}
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket;
double Stoch_main, Stoch_sign;
if (Bars < 100)
{
Print("BARS less than 100");
return (0);
}
if (TakeProfit < 10)
{
Print("TakeProfit less than 10");
return (0);
}
/*
Stoch_main = iStochastic (NULL,15,21,8,13,MODE_SMA,1,MODE_MAIN,0);
Stoch_sign = iStochastic (NULL,15,21,8,13,MODE_SMA,1,MODE_SIGNAL,0);
*/
Stoch_main = iStochastic (NULL,0,30,20,12,MODE_SMA,1,MODE_MAIN,0);
Stoch_sign = iStochastic (NULL,0,30,20,12,MODE_SMA,1,MODE_SIGNAL,0);
/*
Stoch_main = iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0);
Stoch_sign = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);
*/
int isCrossed = Crossed(Stoch_main,Stoch_sign);
int isConfirmed = Confirm(Stoch_main,Stoch_sign,25,75);
int total = OrdersTotal();
if (total == 0)
{
if ((isCrossed == 1) && (isConfirmed == 1))
{
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"Buy at " + Ask,24848,0,Green);
if (ticket > 0)
{
if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY Order opened: " +Ask ,OrderOpenPrice());
else Print ("Error Opening BUY Order: ", GetLastError());
return (0);
}
}
if ((isCrossed == 2) && (isConfirmed == 2))
{
ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"Sell at " + Bid,24848,0,Red);
if (ticket > 0)
{
if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL Order opened: " +Bid ,OrderOpenPrice());
else Print ("Error Opening SELL Order: ", GetLastError());
return (0);
}
}
return (0);
}
else
{
for (cnt = total; cnt < 0; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderType() <= OP_SELL && OrderSymbol() == Symbol())
{
if (OrderType() == OP_BUY) //the trade was a Buy position
{ //check for closing)
if ((isCrossed == 2) && (isConfirmed == 3))
//if (isCrossed == 2)
{ //change of direction
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //close Buy position
return (0);
}
}
else // the trade was a SELL position
{
//should it be closed?
//if ((isCrossed == 1) && (isConfirmed == 4))
if (isCrossed == 1) //Closing the SELL need not to be below the level_buy... it's very dangerous to wait for it...
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //Sell position is now closed
return (0);
}
}
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+EAが想定したとおりの動作をしません。
こんにちは、私はmq4プログラミングの初心者ですが、codersgurusチュートリアルを読みました(本当にありがとうございます!)ので、何か理解できると思います。しかし、移動平均をベースにしたEAを作ったのですが...ひどくうまくいきません。
このルールは非常にシンプルです。
1.MA_04_1H(1時間 足の移動平均期間4を意味する)がMA_14_1Hの上をクロスする。
MA_04_4HがMA_14_4Hを上回ったことを確認する(トレンドは上向き) ------> BUY!
2.MA_04_1HがMA_14_1Hの下を横切る。
MA_04_4HがMA_14_4Hを下回ることを確認(トレンドは下降) ------> SELL!
3. MA_04_1HがMA_14_1Hとクロスしたら、その注文を決済する(ルール1と2を考えると、新しい注文を開始することができる)
4. 1つの取引のみ...(BUYならそのBUYをクローズ。その後、必要ならSELL)
2つの関数を作りました。CrossedとConfirmedの2つの機能を作りました。
Crossedは1時間足、Confirmedは4時間足です。
Confirmedは4時間足のものです。
どなたかデバッグを手伝っていただけませんか?
//| MACross1TradeOnly.mq4 |
//| RobertEli |
//| |
//+------------------------------------------------------------------+
// this will work on MA_04, and MA__14
#property copyright "RobertEli"
#property link ""
extern double Lots = 0.01;
extern int stoploss_value = 10; // $10
bool up = 0, //UP direction, when MA_04 is above MA_14
down = 0, //DOWN direction, when MA_14 is above MA_04
change = 0, //when the MA_04 and MA_14 cross
firsttime = true; //first time for direction_prev
int direction_curr = 0; // 1 if UP, 2 if down...
int direction_prev = 0; // this will hold previous value of direction_curr
int direction_trend= 0; // trend direction for confirmation
int cross = 0; // if direction_curr and direction_prev changes course
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
int Crossed (double line1, double line2)
{
static int last_direction = 0;
static int current_direction = 0;
if (line1 - line2 > 0)//(line1 > line2)
{
current_direction = 1; //UP
if (firsttime == true)
{
current_direction = 0;
last_direction = 1;
firsttime = false;
return (0);
}
}
if (line1 - line2 < 0)//(line1 < line2)
{
current_direction = 2; //DOWN
if (firsttime == true)
{
current_direction = 0;
last_direction = 2;
firsttime = false;
return (0);
}
}
if ((current_direction != last_direction) && (firsttime == false)) //changed direction
{
last_direction = current_direction;
return (last_direction);
}
else
{
return (last_direction);
}
}
int Confirmed (double line1, double line2)
{
int trend;
if (line1 > line2) trend = 1; // trend direction is UP
if (line1 < line2) trend = 2; // trend direction is DOWN
return (trend);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt,ticket, total;
//double MA_04, MA_07 , MA_14 , MA_21 , MA_28; //MOVING AVERAGES with their corresponding period
if (Bars < 100) { Print ("Bars less than 100."); return (0); }
double MA_04_1H = iMA(NULL,60,04,0,MODE_EMA,PRICE_CLOSE,0);
double MA_14_1H = iMA(NULL,60,14,0,MODE_EMA,PRICE_CLOSE,0);
double MA_04_4H = iMA(NULL,240,04,0,MODE_EMA,PRICE_CLOSE,0);
double MA_14_4H = iMA(NULL,240,14,0,MODE_EMA,PRICE_CLOSE,0);
//double stoploss = stoploss_value / (Lots * 100000);
//new code from v_1
cross = Crossed (MA_04_1H,MA_14_1H); // =1 for UP, =2 for DOWN
direction_trend = Confirmed (MA_04_4H, MA_14_4H); // =1 for UP, =2 for DOWN
total = OrdersTotal();
if (total == 0)
{
if((cross == 1) && (direction_trend == 1))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,/*Ask-stoploss*/0,0,"Buy at: "+ Ask,12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice(),",<<<<",OrderStopLoss());
}
else Print("Error opening BUY order : ",GetLastError());
cross = 0;
return(0);
}
if((cross == 2) && (direction_trend == 2))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,/*Bid+stoploss*/0,0,"Sell at: "+ Bid,12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
cross = 0;
return(0);
}
}
if (total == 1)
{
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
// bool no_buy_sell = ((OrderTakeProfit() 0));
if ((OrderType()==OP_BUY) && (cross == 2) )// && (no_buy_sell))
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
//OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+stoploss,0,"Sell at: "+ Bid,12345,0,Red);
return (0);
}
else if ((OrderType()==OP_SELL) && (cross == 1) )// && (no_buy_sell))
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
//OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-stoploss,0,"Buy at: "+ Ask,12345,0,Green);
return (0);
}
}
}
else return (0);
//----
return(0);
}
//+------------------------------------------------------------------+前の投稿は無視してください...私はそのアイデアをゴミ箱に捨てました...私は今これに取り組んでいます...だから、助けてください...