EAを書くのに無償で協力してください。5種類のアイデア - ページ 15

 

それだけです。なるほど、"努力 "しているんですね。そろそろ、もっとアイデアを出してもいいんじゃないかと思うんです。

 
GeneratorID:

それだけです。なるほど、"努力 "しているんですね。そろそろ、もっとアイデアを出してもいいんじゃないかと思うんです。


古い自転車」に興味を持つのは誰だろう?あ なたが探求を始めようとしていることは、フォーラムではとっくに終わっていて、コードベースには無料の実装があることをまだ理解していないようですね - 見て、遊んでみてください。 自分なりのアイデアがあるのでしょうか?そうでなければ、議論することはありません。
 

アドバイザーに未決済注文の最大数を追加するのを手伝ってください!

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

// | 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);

}