EAを書くのに無償で協力してください。5種類のアイデア - ページ 15 1...89101112131415 新しいコメント 削除済み 2013.12.02 05:50 #141 それだけです。なるほど、"努力 "しているんですね。そろそろ、もっとアイデアを出してもいいんじゃないかと思うんです。 Vladyslav Goshkov 2013.12.02 05:57 #142 GeneratorID: それだけです。なるほど、"努力 "しているんですね。そろそろ、もっとアイデアを出してもいいんじゃないかと思うんです。 古い自転車」に興味を持つのは誰だろう?あ なたが探求を始めようとしていることは、フォーラムではとっくに終わっていて、コードベースには無料の実装があることをまだ理解していないようですね - 見て、遊んでみてください。 自分なりのアイデアがあるのでしょうか?そうでなければ、議論することはありません。 Vadim Podoprigora 2017.01.04 21:05 #143 アドバイザーに未決済注文の最大数を追加するのを手伝ってください! // + ----------------------------------------------- -------------------- + // | v128-2.mq4 | // | Copyright©2011、Andrey N. Bolkonsky | // | 2011年3月21日| // |メール:abolk@yandex.ru | Skype:abolk1 | // + ----------------------------------------------- -------------------- + #property copyright "Copyright©2011、Andrey N.Bolkonsky" #property link "abolk@yandex.ru" // extern string rem2="===ロット数==="; extern double _Lots0_1 = 0.1; //基本レベル(1次の場合) extern double _Lots0_2 = 0.1; //ベースレベル(2次用) // extern string rem3="===追加パラメータ==="; extern int _TakeProfit1_Proc = 50; //1次の利益を得るリスクの割合extern int _SpaseFromMaxMin = 1; //上/下からのオフセット// extern string rem4="===ブレークイーブンパラメータ==="; extern bool _IsStopLoss_0 = false; //損益分岐レベルの使用を有効にするextern int _StopLoss_0_From = 0; //損益分岐点からのオフセット(ポイント単位) extern int _StopLoss_0_Level = 15; //損益分岐点// extern string rem5="===トレーリングストップパラメータ==="; extern bool _IsTrailingStop = false; //トレーリングストップを有効にしますbool _IsTrailingStopProfit = true; //損益分岐点からのトレーリングストップを有効にする// extern int _TrailingStopProfit_From = 0; //損益分岐点からのオフセット(ポイント単位) extern int _TrailingStopLevel = 15; //トレーリングストップレベルextern int _TrailingStopStep = 5; //トレーリングストップ移動ステップ// extern string rem6="===ツール設定==="; extern string _Symboll = ""; //機器の記号名:""-現在の記号extern int _Timeframe = 0; //期間:0-現在のチャートの期間int_Digitss; //価格の小数点以下の桁数double _Points; //見積もり通貨でのポイントサイズextern int _Slippage = 2; //スリッページextern int _Magic1 = 1281; // EA注文の一意の数(1次) extern int _Magic2 = 1282; // EA注文の一意の数(2次) // extern string rem7 ="===MA1インジケーターパラメーター==="; extern int _MA1_Timeframe = PERIOD_D1; //期間:0-現在のチャートの期間extern int _MA1_Period = 20; //移動平均を計算するための平均期間extern int _MA1_Shift = 0; //価格チャートに対するインジケーターのシフトextern int _MA1_Method = 0; //平均化方法:0-SMA、1-EMA、2-SMMA、3-LWMA extern int _MA1_Applied_Price = 0; //使用価格:0-クローズ、1-オープン、2-高、3-低// extern string rem8 ="===MA2インジケーターパラメーター==="; extern int _MA2_Timeframe = PERIOD_H4; //期間:0-現在のチャートの期間extern int _MA2_Period = 20; //移動平均を計算するための平均期間extern int _MA2_Shift = 0; //価格チャートに対するインジケーターのシフトextern int _MA2_Method = 0; //平均化方法:0-SMA、1-EMA、2-SMMA、3-LWMA extern int _MA2_Applied_Price = 0; //使用価格:0-クローズ、1-オープン、2-高、3-低// extern string rem9="===ボリンジャーバンドインジケーターパラメーター==="; // extern int _BB_Timeframe = 0; //期間:0-現在のチャートの期間extern int _BB_Period = 20; //メインインジケーターラインの平均期間extern int _BB_Deviation = 2; //メインラインからの逸脱extern int _BB_Bands_Shift = 0; //価格チャートに対するインジケーターのシフトextern int _BB_Applied_Price = 0; //中古価格:0-閉じる// extern string rem10 ="===ZigZagインジケーターパラメーター==="; // extern int _ZZ_Timeframe = 0; //期間:0-現在のチャートの期間extern int _ZZ_ExtDepth = 12; extern int _ZZ_ExtDeviation = 5; extern int _ZZ_ExtBackstep = 3; // datetime_TimePrevious; datetime _TimeCurrent; // string_fstr; int_tp; // void MaxOrders(int max_orders = 5); // = ++ ============================================ = ================ ++ = int init() {{ if(_Symbol == "")_Symboll = Symbol(); // _Digitss = MarketInfo(_Symbol、MODE_DIGITS); _Points = MarketInfo(_Symbol、MODE_POINT); // if(_Timeframe == 0)_Timeframe = Period(); Print( "v128-2> init()>> _Timeframe ="、_ Timeframe、 "rem4 ="、_ IsStopLoss_0、 "rem5 ="、_ IsTrailingStop、_IsTrailingStopProfit); // _fstr = "v128_"; _tp = _FileReadWriteDouble(_fstr + "_ tp.dat"、0); //ファイルが存在することを確認し、存在しない場合は作成しますPrint( "v128-2> init()>> _Timeframe ="、_ Timeframe、 "_tp ="、_ tp); // _TimePrevious = iTime(_Symbol、_Timeframe、0); // Print( "v128-2>完了:init()>> _TimePrevious ="、_ TimePrevious、 "("、TimeToStr(_TimePrevious、TIME_DATE | TIME_MINUTES)、 ")"); return(0); } // = ++ ============================================ = ================ ++ = int start() {{ダブルP_Close1、P_Close2;ダブルBB_1_upper、BB_1_lower;ダブルMA1_0、MA2_0;ダブルP_ask、P_bid; bool is_signal_2_buy、is_signal_2_sell;ダブルP1_buy、P2_buy、P3_buy;ダブルP1_sell、P2_sell、P3_sell; bool is_b1 = false、is_s1 = false; bool is_b2 = false、is_s2 = false; intチケット; // _TimeCurrent = iTime(_Symbol、_Timeframe、0); if(_TimeCurrent!= _TimePrevious) {{ MA1_0 = iMA(_Symbol、_MA1_Timeframe、_MA1_Period、_MA1_Shift、_MA1_Method、_MA1_Applied_Price、0); MA2_0 = iMA(_Symbol、_MA2_Timeframe、_MA2_Period、_MA2_Shift、_MA2_Method、_MA2_Applied_Price、0); BB_1_upper = iBands(_Symbol、_Timeframe、_BB_Period、_BB_Deviation、_BB_Bands_Shift、_BB_Applied_Price、MODE_UPPER、1); BB_1_lower = iBands(_Symbol、_Timeframe、_BB_Period、_BB_Deviation、_BB_Bands_Shift、_BB_Applied_Price、MODE_LOWER、1); P_Close1 = iClose(_Symbol、_Timeframe、1); P_Close2 = iClose(_Symbol、_Timeframe、2); P_ask = MarketInfo(_Symbol、MODE_ASK); P_bid = MarketInfo(_Symbol、MODE_BID); Print( "v120-4>"、_ Symbol、 "|"、_Timeframe、 "-> MA1_0 ="、MA1_0、 "| MA2_0 ="、MA2_0、 "-> BB_1_upper ="、BB_1_upper、 "| BB_1_lower ="、BB_1_lower、 "-> P_Close1 ="、P_Close1、 "| P_Close2 ="、P_Close2、 "-> ask ="、P_ask、 "| bid ="、P_bid); // is_signal_2_buy = P_bid> = MA1_0 && P_bid> = MA2_0 && P_Close1> = BB_1_lower && P_Close2 <= BB_1_lower && P_bid> = BB_1_lower; is_signal_2_sell = P_bid <= MA1_0 && P_bid <= MA2_0 && P_Close1 <= BB_1_upper && P_Close2> = BB_1_upper && P_bid <= BB_1_upper; Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、 "-> is_signal2-> Buy ="、is_signal_2_buy、 "| Sell ="、is_signal_2_sell); //==========市場別//==========購入注文を開くif(is_signal_2_buy) {{ Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、 "->購入注文を開くためのシグナル"); OrdersDeleteAll(OP_SELL); // if(!is_b1 ||!is_b2) {{ P1_buy = P_ask; P3_buy = FindPriceMinMax(false)-(_SpaseFromMaxMin)* _Point; _tp =(P1_buy --P3_buy)/ _Point *(_TakeProfit1_Proc / 100.0); P2_buy = DoubleTestZero(_tp、P1_buy +(_tp)* _Point); // _FileWriteDouble(_fstr + "_ tp.dat"、_tp); // Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、 "->購入->P1_buy="、P1_buy、 "| P2_buy ="、P2_buy、 "| P3_buy ="、P3_buy、 "_tp ="、_tp); //チケット=OrderSend(_Symbol、OP_BUY、_Lots0_1、ND(P1_buy)、_Slippage、ND(P3_buy)、ND(P2_buy)、 NULL、_Magic1、0、CLR_NONE); if(ticket == -1) Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、 "->購入(1)>エラー(開く)#"、GetLastError());それ以外の場合、is_b1 = true; //チケット=OrderSend(_Symbol、OP_BUY、_Lots0_2、ND(P1_buy)、_Slippage、ND(P3_buy)、0、 NULL、_Magic2、0、CLR_NONE); if(ticket == -1) Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、 "->購入(2)>エラー(開く)#"、GetLastError());それ以外の場合、is_b2 = true; // } else {is_b1 = true; is_b2 = true; } } else {is_b1 = true; is_b2 = true; } // Print( "= Buy +++"、is_b1、is_b2、 "=="、is_s1、is_s2); //==========販売注文を開くif(is_signal_2_sell) {{ Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、 "->売り注文を開くためのシグナル"); OrdersDeleteAll(OP_BUY); // if(!is_s1 ||!is_s2) {{ P1_sell = P_bid; P3_sell = FindPriceMinMax(true)+(_SpaseFromMaxMin)* _Point; _tp =(P3_sell --P1_sell)/ _Point *(_TakeProfit1_Proc / 100.0); P2_sell = DoubleTestZero(_tp、P1_sell-(_tp)* _Point); // _FileWriteDouble(_fstr + "_ tp.dat"、_tp); // Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、 "->購入->P1_sell="、P1_sell、 "| P2_sell ="、P2_sell、 "| P3_sell ="、P3_sell); //チケット=OrderSend(_Symbol、OP_SELL、_Lots0_1、ND(P1_sell)、_Slippage、ND(P3_sell)、ND(P2_sell)、 NULL、_Magic1、0、CLR_NONE); if(ticket == -1) Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、 "-> SELL(1)>エラー(開く)#"、GetLastError());それ以外の場合、is_s1 = true; //チケット=OrderSend(_Symbol、OP_SELL、_Lots0_2、ND(P1_sell)、_Slippage、ND(P3_sell)、0、 NULL、_Magic2、0、CLR_NONE); if(ticket == -1) Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、 "-> SELL(2)>エラー(開く)#"、GetLastError());それ以外の場合、is_s2 = true; // } else {is_s1 = true; is_s2 = true; } } else {is_s1 = true; is_s2 = true; } // Print( "= Sell +++"、is_b1、is_b2、 "=="、is_s1、is_s2); // ========== if(is_b1 && is_s1 && is_b2 && is_s2) _TimePrevious = _TimeCurrent; } // if(_IsTrailingStop) {{ if(!FindOrders(_Magic1))TrailingStop(_tp); } // if(_IsStopLoss_0) StopLoss_0(_StopLoss_0_From); // return(0); } // = ++ ============================================ = ================ ++ = double DoubleTestZero(double value、double new_value) {{ if(value == 0)return(value);それ以外の場合はreturn(new_value); } // = ++ ============================================ = ================ ++ = double ND(double value) {{ return(NormalizeDouble(value、_Digits)); } // = ++ ============================================ = ================ ++ = //注文を閉じます。すべてを閉じるで終了void OrdersDeleteAll(int cmd) {{ while(CountOrders(cmd)> 0) {{ for(int i = OrdersTotal()-1; i> = 0; i--) {{ if(OrderSelect(i、SELECT_BY_POS、MODE_TRADES)) {{ if((OrderSymbol()== _Symbol) &&(OrderMagicNumber()== _Magic1 || OrderMagicNumber()== _Magic2) &&(OrderType()== cmd)) {{ if(OrderType()== OP_BUY) if(!OrderClose(OrderTicket()、OrderLots()、MarketInfo(OrderSymbol()、MODE_BID)、_Slippage、CLR_NONE)) Print( "v128-2>"、_ Symbol、 "> BUY-> ticket ="、OrderTicket()、 "->エラー(閉じる)#"、GetLastError()); if(OrderType()== OP_SELL) if(!OrderClose(OrderTicket()、OrderLots()、MarketInfo(OrderSymbol()、MODE_ASK)、_Slippage、CLR_NONE)) Print( "v128-2>"、_ Symbol、 "> SELL-> ticket ="、OrderTicket()、 "->エラー(閉じる)#"、GetLastError()); } } } } // 注文数} // = ++ ============================================ = ================ ++ = //その方向の注文数を数えるint CountOrders(int cmd) {{ int n = 0; for(int i = OrdersTotal()-1; i> = 0; i--) {{ if(OrderSelect(i、SELECT_BY_POS、MODE_TRADES)) {{ if((OrderSymbol()== _Symbol) &&(OrderMagicNumber()== _Magic1 || OrderMagicNumber()== _Magic2) &&(OrderType()== cmd))n ++; } } return(n); } // = ++ ============================================ = ================ ++ = //魔法で注文を検索bool FindOrders(int magic) {{ for(int i = OrdersTotal()-1; i> = 0; i--) {{ if(OrderSelect(i、SELECT_BY_POS、MODE_TRADES)) {{ if((OrderSymbol()== _Symbol)&&(OrderMagicNumber()== magic)) return(true); } } return(false); } // = ++ ============================================ = ================ ++ = //魔法で損益分岐点を計算するvoid StopLoss_0(int from) {{ダブルプロフィットポイント、ビッド、アスク; boolは;ダブルP3_buy、P3_sell; // for(int i = OrdersTotal()-1; i> = 0; i--) {{ if(OrderSelect(i、SELECT_BY_POS、MODE_TRADES)) {{ if(!((OrderSymbol()== _Symbol)&&(OrderMagicNumber()== _Magic1 || OrderMagicNumber()== _Magic2)))続行; // if(OrderType()== OP_BUY) {{ bid = MarketInfo(_Symbol、MODE_BID);利益ポイント=(入札-OrderOpenPrice())/ _Point; is = Profitpoint> = _StopLoss_0_Level + from; P3_buy = ND(OrderOpenPrice()+ from * _Point); // if(is &&(OrderStopLoss()== 0 || OrderStopLoss()<P3_buy)) {{ Print( "v128-2 b4>"、_ Symbol、 "|"、_Timeframe、 "-> Bid ="、MarketInfo(_Symbol、MODE_BID)、 "| p / o ="、OrderOpenPrice()、 "| s / l ="、OrderStopLoss()、 "| P3_buy ="、P3_buy、 "| d ="、_ StopLoss_0_Level、 "| Profitpoint ="、profitpoint); if(!OrderModify(OrderTicket()、OrderOpenPrice()、P3_buy、OrderTakeProfit()、0、CLR_NONE)) Print( "v128-2 b4>"、_ Symbol、 "|"、_Timeframe、 "->購入>ticket="、OrderTicket()、 ">エラー(ブレークイーブン)#"、GetLastError()); } } // else if(OrderType()== OP_SELL) {{ ask = MarketInfo(_Symbol、MODE_ASK);利益ポイント=(OrderOpenPrice()-質問)/ _Point; is = Profitpoint> = _StopLoss_0_Level + from; P3_sell = ND(OrderOpenPrice()-from * _Point); // if(is &&(OrderStopLoss()== 0 || OrderStopLoss()> P3_sell)) {{ Print( "v128-2 b4>"、_ Symbol、 "|"、_Timeframe、 "-> Ask ="、MarketInfo(_Symbol、MODE_ASK)、 "| p / o ="、OrderOpenPrice()、 "| s / l ="、OrderStopLoss()、 "| P3_sell ="、P3_sell、 "| d ="、_ StopLoss_0_Level、 "| Profitpoint ="、profitpoint); if(!OrderModify(OrderTicket()、OrderOpenPrice()、P3_sell、OrderTakeProfit()、0、CLR_NONE)) Print( "v128-2 b4>"、_ Symbol、 "|"、_Timeframe、 "-> SELL-> ticket ="、OrderTicket()、 ">エラー(損益分岐点)#"、GetLastError()); } } } } } // = ++ ============================================ = ================ ++ = //魔法でトレーリングストップを解決するvoid TrailingStop(int from) {{ダブルプロフィットポイント、ビッド、アスク;価格から2倍; // for(int i = OrdersTotal()-1; i> = 0; i--) {{ if(OrderSelect(i、SELECT_BY_POS、MODE_TRADES)) {{ if(!((OrderSymbol()== _Symbol)&&(OrderMagicNumber()== _Magic1 || OrderMagicNumber()== _Magic2)))続行; // if(OrderType()== OP_BUY) {{ if(_IsTrailingStopProfit)fromprice = OrderOpenPrice()+ from * _Point; else fromprice = OrderStopLoss(); // bid = MarketInfo(_Symbol、MODE_BID);利益ポイント=(入札-ND(fromprice))/ _Point; // if(profitpoint> = _TrailingStopLevel &&入札>(OrderStopLoss()+(_TrailingStopLevel + _TrailingStopStep)* _Point)) {{ Print( "v128-2 v4>"、_ Symbol、 "|"、_Timeframe、 "-> Bid ="、MarketInfo(_Symbol、MODE_BID)、 "| p / o ="、OrderOpenPrice()、 "| s / l ="、OrderStopLoss()、 "| d ="、_ TrailingStopLevel、 "| Profitpoint ="、profitpoint); if(!OrderModify(OrderTicket()、OrderOpenPrice()、ND(bid-(_TrailingStopLevel)* _Point)、 OrderTakeProfit()、0、CLR_NONE)) {{ Print( "v128-2 v4>"、_ Symbol、 "|"、_Timeframe、 "->購入>ticket="、OrderTicket()、 ">エラー(トレーリングストップ)#"、GetLastError()); } } } // else if(OrderType()== OP_SELL) {{ if(_IsTrailingStopProfit)fromprice = OrderOpenPrice()-from * _Point; else fromprice = OrderStopLoss(); // ask = MarketInfo(_Symbol、MODE_ASK);利益ポイント=(ND(fromprice)-質問)/ _Point; // if(profitpoint> = _TrailingStopLevel && ask <(OrderStopLoss()-(_TrailingStopLevel + _TrailingStopStep)* _Point)) {{ Print( "v128-2 v4>"、_ Symbol、 "|"、_Timeframe、 "-> Ask ="、MarketInfo(_Symbol、MODE_ASK)、 "| p / o ="、OrderOpenPrice()、 "| s / l ="、OrderStopLoss()、 "| d ="、_ TrailingStopLevel、 "| Profitpoint ="、profitpoint); if(!OrderModify(OrderTicket()、OrderOpenPrice()、ND(ask +(_TrailingStopLevel)* _Point)、 OrderTakeProfit()、0、CLR_NONE)) {{ Print( "v128-2 v4>"、_ Symbol、 "|"、_Timeframe、 "-> SELL> ticket ="、OrderTicket()、 ">エラー(トレーリングストップ)#"、GetLastError()); } } } } } } // = ++ ============================================ = ================ ++ = //ローカルボトムを検索します。価格を返しますdouble FindPriceMinMax(bool isUp) {{ intシフト=1;ダブルプライス=0、p0、p1、p2; while(price == 0) {{ p0 = iCustom(_Symbol、_Timeframe、 "ZigZag"、_ZZ_ExtDepth、_ZZ_ExtDeviation、_ZZ_ExtBackstep、0、shift); p1 = iCustom(_Symbol、_Timeframe、 "ZigZag"、_ZZ_ExtDepth、_ZZ_ExtDeviation、_ZZ_ExtBackstep、1、shift); p2 = iCustom(_Symbol、_Timeframe、 "ZigZag"、_ZZ_ExtDepth、_ZZ_ExtDeviation、_ZZ_ExtBackstep、2、shift); // Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、 // "> sift ="、shift、 "| p0 ="、p0、 "| p1 ="、p1、 "| p2 ="、p2); if(isUp) {{ if(p0!= 0 && p0 == p1)//頂点が見つかりました価格=p0; }そうしないと{{ if(p0!= 0 && p0 == p2)//下部が見つかりました価格=p0; }シフト++; } // Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、 // "-> return(price)="、price); return(価格); } // =============================================== = ==================== //ファイルから変数を読み取ります。 //ファイルが存在しない場合は、ファイルを作成して変数をファイルに書き込みますdouble _FileReadWriteDouble(string filename、double value) {{ int h1 = FileOpen(filename、FILE_BIN); if(h1> 0) {{値=FileReadDouble(h1、DOUBLE_VALUE); FileClose(h1); }そうしないと{{ h1 = FileOpen(filename、FILE_BIN | FILE_WRITE); FileWriteDouble(h1、value、DOUBLE_VALUE); FileClose(h1); } return(value); } // =============================================== = ==================== //変数をファイルに書き込みますvoid _FileWriteDouble(string filename、double value) {{ int h1 = FileOpen(filename、FILE_BIN | FILE_WRITE); FileWriteDouble(h1、value、DOUBLE_VALUE); FileClose(h1); } MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 Any questions from newcomers Please help write EAs 1...89101112131415 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
それだけです。なるほど、"努力 "しているんですね。そろそろ、もっとアイデアを出してもいいんじゃないかと思うんです。
それだけです。なるほど、"努力 "しているんですね。そろそろ、もっとアイデアを出してもいいんじゃないかと思うんです。
古い自転車」に興味を持つのは誰だろう?あ なたが探求を始めようとしていることは、フォーラムではとっくに終わっていて、コードベースには無料の実装があることをまだ理解していないようですね - 見て、遊んでみてください。 自分なりのアイデアがあるのでしょうか?そうでなければ、議論することはありません。
アドバイザーに未決済注文の最大数を追加するのを手伝ってください!
// + ----------------------------------------------- -------------------- +
// | v128-2.mq4 |
// | Copyright©2011、Andrey N. Bolkonsky |
// | 2011年3月21日|
// |メール:abolk@yandex.ru | Skype:abolk1 |
// + ----------------------------------------------- -------------------- +
#property copyright "Copyright©2011、Andrey N.Bolkonsky"
#property link "abolk@yandex.ru"
//
extern string rem2="===ロット数===";
extern double _Lots0_1 = 0.1; //基本レベル(1次の場合)
extern double _Lots0_2 = 0.1; //ベースレベル(2次用)
//
extern string rem3="===追加パラメータ===";
extern int _TakeProfit1_Proc = 50; //1次の利益を得るリスクの割合
extern int _SpaseFromMaxMin = 1; //上/下からのオフセット
//
extern string rem4="===ブレークイーブンパラメータ===";
extern bool _IsStopLoss_0 = false; //損益分岐レベルの使用を有効にする
extern int _StopLoss_0_From = 0; //損益分岐点からのオフセット(ポイント単位)
extern int _StopLoss_0_Level = 15; //損益分岐点
//
extern string rem5="===トレーリングストップパラメータ===";
extern bool _IsTrailingStop = false; //トレーリングストップを有効にします
bool _IsTrailingStopProfit = true; //損益分岐点からのトレーリングストップを有効にする
// extern int _TrailingStopProfit_From = 0; //損益分岐点からのオフセット(ポイント単位)
extern int _TrailingStopLevel = 15; //トレーリングストップレベル
extern int _TrailingStopStep = 5; //トレーリングストップ移動ステップ
//
extern string rem6="===ツール設定===";
extern string _Symboll = ""; //機器の記号名:""-現在の記号
extern int _Timeframe = 0; //期間:0-現在のチャートの期間
int_Digitss; //価格の小数点以下の桁数
double _Points; //見積もり通貨でのポイントサイズ
extern int _Slippage = 2; //スリッページ
extern int _Magic1 = 1281; // EA注文の一意の数(1次)
extern int _Magic2 = 1282; // EA注文の一意の数(2次)
//
extern string rem7 ="===MA1インジケーターパラメーター===";
extern int _MA1_Timeframe = PERIOD_D1; //期間:0-現在のチャートの期間
extern int _MA1_Period = 20; //移動平均を計算するための平均期間
extern int _MA1_Shift = 0; //価格チャートに対するインジケーターのシフト
extern int _MA1_Method = 0; //平均化方法:0-SMA、1-EMA、2-SMMA、3-LWMA
extern int _MA1_Applied_Price = 0; //使用価格:0-クローズ、1-オープン、2-高、3-低
//
extern string rem8 ="===MA2インジケーターパラメーター===";
extern int _MA2_Timeframe = PERIOD_H4; //期間:0-現在のチャートの期間
extern int _MA2_Period = 20; //移動平均を計算するための平均期間
extern int _MA2_Shift = 0; //価格チャートに対するインジケーターのシフト
extern int _MA2_Method = 0; //平均化方法:0-SMA、1-EMA、2-SMMA、3-LWMA
extern int _MA2_Applied_Price = 0; //使用価格:0-クローズ、1-オープン、2-高、3-低
//
extern string rem9="===ボリンジャーバンドインジケーターパラメーター===";
// extern int _BB_Timeframe = 0; //期間:0-現在のチャートの期間
extern int _BB_Period = 20; //メインインジケーターラインの平均期間
extern int _BB_Deviation = 2; //メインラインからの逸脱
extern int _BB_Bands_Shift = 0; //価格チャートに対するインジケーターのシフト
extern int _BB_Applied_Price = 0; //中古価格:0-閉じる
//
extern string rem10 ="===ZigZagインジケーターパラメーター===";
// extern int _ZZ_Timeframe = 0; //期間:0-現在のチャートの期間
extern int _ZZ_ExtDepth = 12;
extern int _ZZ_ExtDeviation = 5;
extern int _ZZ_ExtBackstep = 3;
//
datetime_TimePrevious;
datetime _TimeCurrent;
//
string_fstr;
int_tp;
//
void MaxOrders(int max_orders = 5);
// = ++ ============================================ = ================ ++ =
int init()
{{
if(_Symbol == "")_Symboll = Symbol();
//
_Digitss = MarketInfo(_Symbol、MODE_DIGITS);
_Points = MarketInfo(_Symbol、MODE_POINT);
//
if(_Timeframe == 0)_Timeframe = Period();
Print( "v128-2> init()>> _Timeframe ="、_ Timeframe、
"rem4 ="、_ IsStopLoss_0、
"rem5 ="、_ IsTrailingStop、_IsTrailingStopProfit);
//
_fstr = "v128_";
_tp = _FileReadWriteDouble(_fstr + "_ tp.dat"、0); //ファイルが存在することを確認し、存在しない場合は作成します
Print( "v128-2> init()>> _Timeframe ="、_ Timeframe、 "_tp ="、_ tp);
//
_TimePrevious = iTime(_Symbol、_Timeframe、0);
//
Print( "v128-2>完了:init()>> _TimePrevious ="、_ TimePrevious、 "("、TimeToStr(_TimePrevious、TIME_DATE | TIME_MINUTES)、 ")");
return(0);
}
// = ++ ============================================ = ================ ++ =
int start()
{{
ダブルP_Close1、P_Close2;
ダブルBB_1_upper、BB_1_lower;
ダブルMA1_0、MA2_0;
ダブルP_ask、P_bid;
bool is_signal_2_buy、is_signal_2_sell;
ダブルP1_buy、P2_buy、P3_buy;
ダブルP1_sell、P2_sell、P3_sell;
bool is_b1 = false、is_s1 = false;
bool is_b2 = false、is_s2 = false;
intチケット;
//
_TimeCurrent = iTime(_Symbol、_Timeframe、0);
if(_TimeCurrent!= _TimePrevious)
{{
MA1_0 = iMA(_Symbol、_MA1_Timeframe、_MA1_Period、_MA1_Shift、_MA1_Method、_MA1_Applied_Price、0);
MA2_0 = iMA(_Symbol、_MA2_Timeframe、_MA2_Period、_MA2_Shift、_MA2_Method、_MA2_Applied_Price、0);
BB_1_upper = iBands(_Symbol、_Timeframe、_BB_Period、_BB_Deviation、_BB_Bands_Shift、_BB_Applied_Price、MODE_UPPER、1);
BB_1_lower = iBands(_Symbol、_Timeframe、_BB_Period、_BB_Deviation、_BB_Bands_Shift、_BB_Applied_Price、MODE_LOWER、1);
P_Close1 = iClose(_Symbol、_Timeframe、1);
P_Close2 = iClose(_Symbol、_Timeframe、2);
P_ask = MarketInfo(_Symbol、MODE_ASK);
P_bid = MarketInfo(_Symbol、MODE_BID);
Print( "v120-4>"、_ Symbol、 "|"、_Timeframe、
"-> MA1_0 ="、MA1_0、 "| MA2_0 ="、MA2_0、
"-> BB_1_upper ="、BB_1_upper、 "| BB_1_lower ="、BB_1_lower、
"-> P_Close1 ="、P_Close1、 "| P_Close2 ="、P_Close2、
"-> ask ="、P_ask、 "| bid ="、P_bid);
//
is_signal_2_buy = P_bid> = MA1_0 && P_bid> = MA2_0 && P_Close1> = BB_1_lower && P_Close2 <= BB_1_lower && P_bid> = BB_1_lower;
is_signal_2_sell = P_bid <= MA1_0 && P_bid <= MA2_0 && P_Close1 <= BB_1_upper && P_Close2> = BB_1_upper && P_bid <= BB_1_upper;
Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、
"-> is_signal2-> Buy ="、is_signal_2_buy、 "| Sell ="、is_signal_2_sell);
//==========市場別
//==========購入注文を開く
if(is_signal_2_buy)
{{
Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、
"->購入注文を開くためのシグナル");
OrdersDeleteAll(OP_SELL);
//
if(!is_b1 ||!is_b2)
{{
P1_buy = P_ask;
P3_buy = FindPriceMinMax(false)-(_SpaseFromMaxMin)* _Point;
_tp =(P1_buy --P3_buy)/ _Point *(_TakeProfit1_Proc / 100.0);
P2_buy = DoubleTestZero(_tp、P1_buy +(_tp)* _Point);
//
_FileWriteDouble(_fstr + "_ tp.dat"、_tp);
//
Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、
"->購入->P1_buy="、P1_buy、 "| P2_buy ="、P2_buy、 "| P3_buy ="、P3_buy、 "_tp ="、_tp);
//
チケット=OrderSend(_Symbol、OP_BUY、_Lots0_1、ND(P1_buy)、_Slippage、ND(P3_buy)、ND(P2_buy)、
NULL、_Magic1、0、CLR_NONE);
if(ticket == -1)
Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、
"->購入(1)>エラー(開く)#"、GetLastError());
それ以外の場合、is_b1 = true;
//
チケット=OrderSend(_Symbol、OP_BUY、_Lots0_2、ND(P1_buy)、_Slippage、ND(P3_buy)、0、
NULL、_Magic2、0、CLR_NONE);
if(ticket == -1)
Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、
"->購入(2)>エラー(開く)#"、GetLastError());
それ以外の場合、is_b2 = true;
//
}
else {is_b1 = true; is_b2 = true; }
}
else {is_b1 = true; is_b2 = true; }
// Print( "= Buy +++"、is_b1、is_b2、 "=="、is_s1、is_s2);
//==========販売注文を開く
if(is_signal_2_sell)
{{
Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、
"->売り注文を開くためのシグナル");
OrdersDeleteAll(OP_BUY);
//
if(!is_s1 ||!is_s2)
{{
P1_sell = P_bid;
P3_sell = FindPriceMinMax(true)+(_SpaseFromMaxMin)* _Point;
_tp =(P3_sell --P1_sell)/ _Point *(_TakeProfit1_Proc / 100.0);
P2_sell = DoubleTestZero(_tp、P1_sell-(_tp)* _Point);
//
_FileWriteDouble(_fstr + "_ tp.dat"、_tp);
//
Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、
"->購入->P1_sell="、P1_sell、 "| P2_sell ="、P2_sell、 "| P3_sell ="、P3_sell);
//
チケット=OrderSend(_Symbol、OP_SELL、_Lots0_1、ND(P1_sell)、_Slippage、ND(P3_sell)、ND(P2_sell)、
NULL、_Magic1、0、CLR_NONE);
if(ticket == -1)
Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、
"-> SELL(1)>エラー(開く)#"、GetLastError());
それ以外の場合、is_s1 = true;
//
チケット=OrderSend(_Symbol、OP_SELL、_Lots0_2、ND(P1_sell)、_Slippage、ND(P3_sell)、0、
NULL、_Magic2、0、CLR_NONE);
if(ticket == -1)
Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、
"-> SELL(2)>エラー(開く)#"、GetLastError());
それ以外の場合、is_s2 = true;
//
}
else {is_s1 = true; is_s2 = true; }
}
else {is_s1 = true; is_s2 = true; }
// Print( "= Sell +++"、is_b1、is_b2、 "=="、is_s1、is_s2);
// ==========
if(is_b1 && is_s1 && is_b2 && is_s2)
_TimePrevious = _TimeCurrent;
}
//
if(_IsTrailingStop)
{{
if(!FindOrders(_Magic1))TrailingStop(_tp);
}
//
if(_IsStopLoss_0)
StopLoss_0(_StopLoss_0_From);
//
return(0);
}
// = ++ ============================================ = ================ ++ =
double DoubleTestZero(double value、double new_value)
{{
if(value == 0)return(value);
それ以外の場合はreturn(new_value);
}
// = ++ ============================================ = ================ ++ =
double ND(double value)
{{
return(NormalizeDouble(value、_Digits));
}
// = ++ ============================================ = ================ ++ =
//注文を閉じます。すべてを閉じるで終了
void OrdersDeleteAll(int cmd)
{{
while(CountOrders(cmd)> 0)
{{
for(int i = OrdersTotal()-1; i> = 0; i--)
{{
if(OrderSelect(i、SELECT_BY_POS、MODE_TRADES))
{{
if((OrderSymbol()== _Symbol)
&&(OrderMagicNumber()== _Magic1 || OrderMagicNumber()== _Magic2)
&&(OrderType()== cmd))
{{
if(OrderType()== OP_BUY)
if(!OrderClose(OrderTicket()、OrderLots()、MarketInfo(OrderSymbol()、MODE_BID)、_Slippage、CLR_NONE))
Print( "v128-2>"、_ Symbol、 "> BUY-> ticket ="、OrderTicket()、
"->エラー(閉じる)#"、GetLastError());
if(OrderType()== OP_SELL)
if(!OrderClose(OrderTicket()、OrderLots()、MarketInfo(OrderSymbol()、MODE_ASK)、_Slippage、CLR_NONE))
Print( "v128-2>"、_ Symbol、 "> SELL-> ticket ="、OrderTicket()、
"->エラー(閉じる)#"、GetLastError());
}
}
}
}
// 注文数
}
// = ++ ============================================ = ================ ++ =
//その方向の注文数を数える
int CountOrders(int cmd)
{{
int n = 0;
for(int i = OrdersTotal()-1; i> = 0; i--)
{{
if(OrderSelect(i、SELECT_BY_POS、MODE_TRADES))
{{
if((OrderSymbol()== _Symbol)
&&(OrderMagicNumber()== _Magic1 || OrderMagicNumber()== _Magic2)
&&(OrderType()== cmd))n ++;
}
}
return(n);
}
// = ++ ============================================ = ================ ++ =
//魔法で注文を検索
bool FindOrders(int magic)
{{
for(int i = OrdersTotal()-1; i> = 0; i--)
{{
if(OrderSelect(i、SELECT_BY_POS、MODE_TRADES))
{{
if((OrderSymbol()== _Symbol)&&(OrderMagicNumber()== magic))
return(true);
}
}
return(false);
}
// = ++ ============================================ = ================ ++ =
//魔法で損益分岐点を計算する
void StopLoss_0(int from)
{{
ダブルプロフィットポイント、ビッド、アスク;
boolは;
ダブルP3_buy、P3_sell;
//
for(int i = OrdersTotal()-1; i> = 0; i--)
{{
if(OrderSelect(i、SELECT_BY_POS、MODE_TRADES))
{{
if(!((OrderSymbol()== _Symbol)&&(OrderMagicNumber()== _Magic1 || OrderMagicNumber()== _Magic2)))続行;
//
if(OrderType()== OP_BUY)
{{
bid = MarketInfo(_Symbol、MODE_BID);
利益ポイント=(入札-OrderOpenPrice())/ _Point;
is = Profitpoint> = _StopLoss_0_Level + from;
P3_buy = ND(OrderOpenPrice()+ from * _Point);
//
if(is &&(OrderStopLoss()== 0 || OrderStopLoss()<P3_buy))
{{
Print( "v128-2 b4>"、_ Symbol、 "|"、_Timeframe、
"-> Bid ="、MarketInfo(_Symbol、MODE_BID)、
"| p / o ="、OrderOpenPrice()、 "| s / l ="、OrderStopLoss()、 "| P3_buy ="、P3_buy、
"| d ="、_ StopLoss_0_Level、 "| Profitpoint ="、profitpoint);
if(!OrderModify(OrderTicket()、OrderOpenPrice()、P3_buy、OrderTakeProfit()、0、CLR_NONE))
Print( "v128-2 b4>"、_ Symbol、 "|"、_Timeframe、
"->購入>ticket="、OrderTicket()、 ">エラー(ブレークイーブン)#"、GetLastError());
}
}
//
else if(OrderType()== OP_SELL)
{{
ask = MarketInfo(_Symbol、MODE_ASK);
利益ポイント=(OrderOpenPrice()-質問)/ _Point;
is = Profitpoint> = _StopLoss_0_Level + from;
P3_sell = ND(OrderOpenPrice()-from * _Point);
//
if(is &&(OrderStopLoss()== 0 || OrderStopLoss()> P3_sell))
{{
Print( "v128-2 b4>"、_ Symbol、 "|"、_Timeframe、
"-> Ask ="、MarketInfo(_Symbol、MODE_ASK)、
"| p / o ="、OrderOpenPrice()、 "| s / l ="、OrderStopLoss()、 "| P3_sell ="、P3_sell、
"| d ="、_ StopLoss_0_Level、 "| Profitpoint ="、profitpoint);
if(!OrderModify(OrderTicket()、OrderOpenPrice()、P3_sell、OrderTakeProfit()、0、CLR_NONE))
Print( "v128-2 b4>"、_ Symbol、 "|"、_Timeframe、
"-> SELL-> ticket ="、OrderTicket()、 ">エラー(損益分岐点)#"、GetLastError());
}
}
}
}
}
// = ++ ============================================ = ================ ++ =
//魔法でトレーリングストップを解決する
void TrailingStop(int from)
{{
ダブルプロフィットポイント、ビッド、アスク;
価格から2倍;
//
for(int i = OrdersTotal()-1; i> = 0; i--)
{{
if(OrderSelect(i、SELECT_BY_POS、MODE_TRADES))
{{
if(!((OrderSymbol()== _Symbol)&&(OrderMagicNumber()== _Magic1 || OrderMagicNumber()== _Magic2)))続行;
//
if(OrderType()== OP_BUY)
{{
if(_IsTrailingStopProfit)fromprice = OrderOpenPrice()+ from * _Point;
else fromprice = OrderStopLoss();
//
bid = MarketInfo(_Symbol、MODE_BID);
利益ポイント=(入札-ND(fromprice))/ _Point;
//
if(profitpoint> = _TrailingStopLevel &&
入札>(OrderStopLoss()+(_TrailingStopLevel + _TrailingStopStep)* _Point))
{{
Print( "v128-2 v4>"、_ Symbol、 "|"、_Timeframe、
"-> Bid ="、MarketInfo(_Symbol、MODE_BID)、
"| p / o ="、OrderOpenPrice()、 "| s / l ="、OrderStopLoss()、
"| d ="、_ TrailingStopLevel、 "| Profitpoint ="、profitpoint);
if(!OrderModify(OrderTicket()、OrderOpenPrice()、ND(bid-(_TrailingStopLevel)* _Point)、
OrderTakeProfit()、0、CLR_NONE))
{{
Print( "v128-2 v4>"、_ Symbol、 "|"、_Timeframe、
"->購入>ticket="、OrderTicket()、 ">エラー(トレーリングストップ)#"、GetLastError());
}
}
}
//
else if(OrderType()== OP_SELL)
{{
if(_IsTrailingStopProfit)fromprice = OrderOpenPrice()-from * _Point;
else fromprice = OrderStopLoss();
//
ask = MarketInfo(_Symbol、MODE_ASK);
利益ポイント=(ND(fromprice)-質問)/ _Point;
//
if(profitpoint> = _TrailingStopLevel &&
ask <(OrderStopLoss()-(_TrailingStopLevel + _TrailingStopStep)* _Point))
{{
Print( "v128-2 v4>"、_ Symbol、 "|"、_Timeframe、
"-> Ask ="、MarketInfo(_Symbol、MODE_ASK)、
"| p / o ="、OrderOpenPrice()、 "| s / l ="、OrderStopLoss()、
"| d ="、_ TrailingStopLevel、 "| Profitpoint ="、profitpoint);
if(!OrderModify(OrderTicket()、OrderOpenPrice()、ND(ask +(_TrailingStopLevel)* _Point)、
OrderTakeProfit()、0、CLR_NONE))
{{
Print( "v128-2 v4>"、_ Symbol、 "|"、_Timeframe、
"-> SELL> ticket ="、OrderTicket()、 ">エラー(トレーリングストップ)#"、GetLastError());
}
}
}
}
}
}
// = ++ ============================================ = ================ ++ =
//ローカルボトムを検索します。価格を返します
double FindPriceMinMax(bool isUp)
{{
intシフト=1;
ダブルプライス=0、p0、p1、p2;
while(price == 0)
{{
p0 = iCustom(_Symbol、_Timeframe、 "ZigZag"、_ZZ_ExtDepth、_ZZ_ExtDeviation、_ZZ_ExtBackstep、0、shift);
p1 = iCustom(_Symbol、_Timeframe、 "ZigZag"、_ZZ_ExtDepth、_ZZ_ExtDeviation、_ZZ_ExtBackstep、1、shift);
p2 = iCustom(_Symbol、_Timeframe、 "ZigZag"、_ZZ_ExtDepth、_ZZ_ExtDeviation、_ZZ_ExtBackstep、2、shift);
// Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、
// "> sift ="、shift、 "| p0 ="、p0、 "| p1 ="、p1、 "| p2 ="、p2);
if(isUp)
{{
if(p0!= 0 && p0 == p1)//頂点が見つかりました
価格=p0;
}
そうしないと
{{
if(p0!= 0 && p0 == p2)//下部が見つかりました
価格=p0;
}
シフト++;
}
// Print( "v128-2>"、_ Symbol、 "|"、_Timeframe、
// "-> return(price)="、price);
return(価格);
}
// =============================================== = ====================
//ファイルから変数を読み取ります。
//ファイルが存在しない場合は、ファイルを作成して変数をファイルに書き込みます
double _FileReadWriteDouble(string filename、double value)
{{
int h1 = FileOpen(filename、FILE_BIN);
if(h1> 0)
{{
値=FileReadDouble(h1、DOUBLE_VALUE);
FileClose(h1);
}
そうしないと
{{
h1 = FileOpen(filename、FILE_BIN | FILE_WRITE);
FileWriteDouble(h1、value、DOUBLE_VALUE);
FileClose(h1);
}
return(value);
}
// =============================================== = ====================
//変数をファイルに書き込みます
void _FileWriteDouble(string filename、double value)
{{
int h1 = FileOpen(filename、FILE_BIN | FILE_WRITE);
FileWriteDouble(h1、value、DOUBLE_VALUE);
FileClose(h1);
}