コーディングのヘルプ - ページ 238 1...231232233234235236237238239240241242243244245...786 新しいコメント matmar 2014.03.04 06:54 #2371 選択できるオプションを追加することはできないのでしょうか? 例えば 別々、購入、別売り 修正しました。BEはすべて0、または+1、または+2ピップを購入するか、またはすべてのBE 0、1または2ピップを販売? それは可能ですか? be.mq4 ファイル: be.mq4 1 kb SuLaimon 2014.03.04 09:29 #2372 こんにちは、Mladen 。 私はFX Genを使い、mq4コンパイラやオンラインフォーラムの例を参考にスニペットやコードを使ってEAを書いています。 void OpenNewTrade() { datetime lastTime = 0; int lastTicket = -1; // なしオープン。 for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket ) { lastTime = OrderOpenTime(); lastTicket = OrderTicket(); if (OrderType() == OP_BUY || OrderType() == OP_SELL) && Ask - OrderOpenPrice() >= Grid*PipValue*Point { { BuyOrder(); } if (OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderOpenPrice() - Bid >= Grid*PipValue*Point { { SellOrder(); } } } return(lastTicket); その他 Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print"); } あなたは、このコードを見てみることができます 日付と注文チケットを使用して、最初に最も古い順序を削除しようとしている、例えば、開かれた順序> 2は、最も古い順序を削除します。 //------------------------------------------------------------- // Etasoft Inc.Forex EA and Script Generator バージョン4.1 EA //------------------------------------------------------------- // キーワードMT4、Forex EAビルダー、EA作成、Expert Advisorデベロッパー #property copyright "Copyright © 2011, Etasoft Inc.Forex EA ジェネレーター v4.1" #property link #include #インクルード // エクスポートされた変数 extern int OrderId = 1; extern int Slippage = 2; extern double Lots = 0.01; extern int MaxOrdersAllowed = 2;// 買い注文と売り注文の両方が可能 extern int Grid = 10; // 注文を開くまでの合計距離(pips単位 extern string EAComment = "564テスト"; // ローカル変数 double PipValue=1; // この変数は、5桁のブローカーをサポートするために用意されました。 bool Terminated = false; string LF = "\n"; // 改行が必要なカスタムブロックやユーティリティブロックに使用します。 int NDigits = 4; // 主にFlexタイプのブロックのNormalizeDoubleに使用されます。 int ObjCount = 0; // チャート上に作成された全オブジェクトの数、ユニークな名前のオブジェクトを作成可能 int current = 0; int init() { NDigits = Digits; if (false) ObjectsDeleteAll(); // チャートを消去します。 Comment(""); // チャートを消去します。 } // エキスパート・スタート int start() { if (Bars < 10) { Comment("バーが足りません"); return (0); if (終端 == true) { Comment("EAが終了しました。"); return (0); } OnEveryTick1(); } void OnEveryTick1() { if (true == false && false) PipValue = 10; if (true && (NDigits == 3 || NDigits == 5))PipValue = 10; IfOrderDoesNotExist2()。 IfOrderDoesNotExist4(); MaximumOrder()。 void IfOrderDoesNotExist2() { bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1) { exists = true。 } } さもなくば { Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print"); } if (exists == false) { BuyPendingOrder()を実行します。 } } void IfOrderDoesNotExist4() { bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1) { exists = true。 } さもなくば { Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print"); } if (exists == false) { SellPendingOrder()を実行します。 } } void BuyPendingOrder() { int expire = TimeCurrent() + 60 * 0; double price = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point.Double SL = price - 0*PipValue*Point; double SL = price - 0*PipValue*Point; if (0 == 0) SL = 0; double TP = price + 0*PipValue*Point; if (0 == 0) TP = 0; if (0 == 0) expire = 0; int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue); if (チケット == -1) { Print("OrderSend() error - ", ErrorDescription(GetLastError())); } } void SellPendingOrder() { int expire = TimeCurrent() + 60 * 0; double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point.Double SL = price + 0*PipValue*Point; double SL = price + 0*PipValue*Point; if (0 == 0) SL = 0; double TP = price - 0*PipValue*Point; if (0 == 0) TP = 0; if (0 == 0) expire = 0; int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red); if (ticket == -1) { Print("OrderSend() error - ", ErrorDescription(GetLastError())); } } void MaximumOrder() { if (MaxOrdersAllowed> 0) { OrderCount(); } void OrderCount() { int count = 0; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol()) if (OrderMagicNumber() == OrderId) if (OrderType() == OP_BUY || OrderType() == OP_SELL) { count++; } } さもなくば { Print("OrderSend() error - ", ErrorDescription(GetLastError())).Print("OrderSend() error - ", ErrorDescription(GetLastError()).Print"); } if (count > MaxOrdersAllowed ) { DeleteOldestOrder()を実行します。 } } void DeleteOldestOrder() { datetime lastTime = 0; int lastTicket = -1; // どれも開いていません。 for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )) { lastTime = OrderOpenTime(); lastTicket = OrderTicket(); if (OrderType() == OP_BUY || OrderType() == OP_SELL ) { { OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red); } } } return(lastTicket); その他 Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print"); } int deinit() { if (false) ObjectsDeleteAll(); Coding help EAが複数のペアで実行されない、助けが必要 [アーカイブ!】どんなエキスパートやインジケーターでも無料で書きます。 Mladen Rakic 2014.03.04 10:17 #2373 sulaimoney: こんにちは、Mladen 。私は主にFX Genを使い、mq4コンパイラやオンラインフォーラムの例を参考にスニペットやコードを使ってEAを作成しています。 void OpenNewTrade() { datetime lastTime = 0; int lastTicket = -1; // なしオープン。 for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket ) { lastTime = OrderOpenTime(); lastTicket = OrderTicket(); if (OrderType() == OP_BUY || OrderType() == OP_SELL) && Ask - OrderOpenPrice() >= Grid*PipValue*Point { { BuyOrder(); } if (OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderOpenPrice() - Bid >= Grid*PipValue*Point { { SellOrder(); } } } return(lastTicket); その他 Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print"); } あなたは、このコードを見てみることができます 日付と注文チケットを使用して、最初に最も古い順序を削除しようとしている、例えば、開かれた順序> 2は、最も古い順序を削除します。 //------------------------------------------------------------- // Etasoft Inc.Forex EA and Script Generator バージョン4.1 EA //------------------------------------------------------------- // キーワードMT4、Forex EAビルダー、EA作成、Expert Advisorデベロッパー #property copyright "Copyright © 2011, Etasoft Inc.Forex EA ジェネレーター v4.1" #property link #include #インクルード // エクスポートされた変数 extern int OrderId = 1; extern int Slippage = 2; extern double Lots = 0.01; extern int MaxOrdersAllowed = 2;// 買い注文と売り注文の両方が可能 extern int Grid = 10; // 注文を開くまでの合計距離(pips単位 extern string EAComment = "564テスト"; // ローカル変数 double PipValue=1; // この変数は、5桁のブローカーをサポートするために用意されました。 bool Terminated = false; string LF = "\n"; // 改行が必要なカスタムブロックやユーティリティブロックに使用します。 int NDigits = 4; // 主にFlexタイプのブロックのNormalizeDoubleに使用されます。 int ObjCount = 0; // チャート上に作成された全オブジェクトの数、ユニークな名前のオブジェクトを作成可能 int current = 0; int init() { NDigits = Digits; if (false) ObjectsDeleteAll(); // チャートを消去します。 Comment(""); // チャートを消去します。 } // エキスパート・スタート int start() { if (Bars < 10) { Comment("バーが足りません"); return (0); if (終端 == true) { Comment("EAが終了しました。"); return (0); } OnEveryTick1(); } void OnEveryTick1() { if (true == false && false) PipValue = 10; if (true && (NDigits == 3 || NDigits == 5))PipValue = 10; IfOrderDoesNotExist2()。 IfOrderDoesNotExist4(); MaximumOrder()。 void IfOrderDoesNotExist2() { bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1) { exists = true。 } } さもなくば { Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print"); } if (exists == false) { BuyPendingOrder()を実行します。 } } void IfOrderDoesNotExist4() { bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1) { exists = true。 } さもなくば { Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print"); } if (exists == false) { SellPendingOrder()を実行します。 } } void BuyPendingOrder() { int expire = TimeCurrent() + 60 * 0; double price = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point.Double SL = price - 0*PipValue*Point; double SL = price - 0*PipValue*Point; if (0 == 0) SL = 0; double TP = price + 0*PipValue*Point; if (0 == 0) TP = 0; if (0 == 0) expire = 0; int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue); if (チケット == -1) { Print("OrderSend() error - ", ErrorDescription(GetLastError())); } } void SellPendingOrder() { int expire = TimeCurrent() + 60 * 0; double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point.Double SL = price + 0*PipValue*Point; double SL = price + 0*PipValue*Point; if (0 == 0) SL = 0; double TP = price - 0*PipValue*Point; if (0 == 0) TP = 0; if (0 == 0) expire = 0; int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red); if (ticket == -1) { Print("OrderSend() error - ", ErrorDescription(GetLastError())); } } void MaximumOrder() { if (MaxOrdersAllowed> 0) { OrderCount(); } void OrderCount() { int count = 0; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol()) if (OrderMagicNumber() == OrderId) if (OrderType() == OP_BUY || OrderType() == OP_SELL) { count++; } } さもなくば { Print("OrderSend() error - ", ErrorDescription(GetLastError())).Print("OrderSend() error - ", ErrorDescription(GetLastError()).Print"); } if (count > MaxOrdersAllowed ) { DeleteOldestOrder()を実行します。 } } void DeleteOldestOrder() { datetime lastTime = 0; int lastTicket = -1; // どれも開いていません。 for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )) { lastTime = OrderOpenTime(); lastTicket = OrderTicket(); if (OrderType() == OP_BUY || OrderType() == OP_SELL ) { { OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red); } } } return(lastTicket); その他 Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print"); } int deinit() { if (false) ObjectsDeleteAll(); } このような関数を 使用してみてください。 void DeleteOldestOrder() { datetime lastTime = Time[0]+Period()*60; int lastTicket = -1; // None open. for (int i=OrdersTotal()-1; i >= 0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if ((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() <= lastTime) { lastTime = OrderOpenTime(); lastTicket = OrderTicket(); } } if (lastTicket>-1) if (OrderSelect(lastTicket,SELECT_BY_TICKET,MODE_TRADES)) OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red); } Coding help コーディングヘルプ...アラートの代わりにインジケータをフィルタリングする方法を教えてください。 初心者の方からの質問 MQL5 MT5 MetaTrader SuLaimon 2014.03.04 12:31 #2374 Mladenさん、ありがとうございます。 このような長いコードをフォーラムに投稿して申し訳ありません。まだインターフェースに慣れていないのです。ありがとうございました。 削除済み 2014.03.04 17:28 #2375 インジケータが自動的に更新されません。 私の取引に非常に適したインジケータがあります。 残念なことに、このインジケータは自動的には更新されません。常に手動で更新しなければなりません。 この問題を解決する方法はありますか? それは非常に有用であろう!! 事前にありがとうございました。 追伸:私が持っているすべてを添付しました。 ファイル: macfibo_v1.1.ex4 14 kb macfibo_v1.1.mq4 5 kb mac-fibo.ex4 14 kb mac-fibo.mq4 6 kb ms03-039 2014.03.05 15:12 #2376 彼は通知のSMSを望んでいる。どのようにコードを見ますか? Mladen Rakic 2014.03.05 15:14 #2377 popej30: 彼は通知のSMSを望んでいます。どのようなコードに見えますか? ポープ30 次のようにします。 SendNotification("notification message that you want to send"); ms03-039 2014.03.05 15:28 #2378 あなたの電話番号は?私の番号は0039 555-23-45です。どこに入力するのですか? 例 #property indicator_separate_window #property indicator_minimum -1.1 #property indicator_maximum 1.1 #property indicator_buffers 2 #property indicator_color1 Aqua #property indicator_color2 Lime extern int period = 25; extern int limit = 5000; double g_ibuf_84[]; double g_ibuf_88[]; double g_ibuf_92[]; int init() { IndicatorBuffers(3); SetIndexStyle(0, DRAW_ARROW); SetIndexStyle(1, DRAW_ARROW); SetIndexStyle(2, DRAW_NONE); SetIndexEmptyValue(0, 0.0); SetIndexEmptyValue(1, 0.0); SetIndexArrow(0, 233); SetIndexArrow(1, 234); SetIndexBuffer(0, g_ibuf_88); SetIndexBuffer(1, g_ibuf_92); SetIndexBuffer(2, g_ibuf_84); IndicatorShortName("BR16"); return (0); } int start() { double ld_72; double ld_24 = 0; double ld_32 = 0; double ld_unused_40 = 0; double ld_unused_48 = 0; double ld_56 = 0; double ld_unused_64 = 0; double l_low_80 = 0; double l_high_88 = 0; for (int li_96 = 0; li_96 <= limit; li_96++) { g_ibuf_88[li_96] = 0; g_ibuf_92[li_96] = 0; } for (li_96 = 0; li_96 <= limit; li_96++) { l_high_88 = High; l_low_80 = Low; ld_72 = (High[li_96] + Low[li_96]) / 2.0; if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32; else ld_24 = 0.0; ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999); g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0; ld_32 = ld_24; ld_56 = g_ibuf_84[li_96]; } for (li_96 = 0; li_96 <= limit; li_96++) { if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1; if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1; } return (0); } Coding help Heeeeelp!!! トレンド指標 Mladen Rakic 2014.03.05 15:32 #2379 popej30: そして、どこに自分の電話番号を入れるのですか?私の番号 0039 555-23-45 です。どこに入力するのですか?例 #property indicator_separate_window #property indicator_minimum -1.1 #property indicator_maximum 1.1 #property indicator_buffers 2 #property indicator_color1 Aqua #property indicator_color2 Lime extern int period = 25; extern int limit = 5000; double g_ibuf_84[]; double g_ibuf_88[]; double g_ibuf_92[]; int init() { IndicatorBuffers(3); SetIndexStyle(0, DRAW_ARROW); SetIndexStyle(1, DRAW_ARROW); SetIndexStyle(2, DRAW_NONE); SetIndexEmptyValue(0, 0.0); SetIndexEmptyValue(1, 0.0); SetIndexArrow(0, 233); SetIndexArrow(1, 234); SetIndexBuffer(0, g_ibuf_88); SetIndexBuffer(1, g_ibuf_92); SetIndexBuffer(2, g_ibuf_84); IndicatorShortName("BR16"); return (0); } int start() { double ld_72; double ld_24 = 0; double ld_32 = 0; double ld_unused_40 = 0; double ld_unused_48 = 0; double ld_56 = 0; double ld_unused_64 = 0; double l_low_80 = 0; double l_high_88 = 0; for (int li_96 = 0; li_96 <= limit; li_96++) { g_ibuf_88[li_96] = 0; g_ibuf_92[li_96] = 0; } for (li_96 = 0; li_96 <= limit; li_96++) { l_high_88 = High; l_low_80 = Low; ld_72 = (High[li_96] + Low[li_96]) / 2.0; if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32; else ld_24 = 0.0; ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999); g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0; ld_32 = ld_24; ld_56 = g_ibuf_84[li_96]; } for (li_96 = 0; li_96 <= limit; li_96++) { if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1; if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1; } return (0); } これは、あなたがそれを行うことができます良い説明です。 Mladen Rakic 2014.03.05 18:52 #2380 Jim Clark: インジケータが自動的に更新されない。 ここに私の取引に非常に適したインジケータがあります。残念なことに、彼は自分自身で更新されません。私は常に手動で彼が更新されることをリフレッシュする必要があります。この問題を解決する方法はありますか?それは非常に有用であろう!!事前にありがとうございました。 追伸:手持ちのものをすべて添付しました。 ジム 全体を書き直す代わりに、バーを計算 するための制限を追加し、その後、すべてのこれらのバーが再計算されます。これは、リフレッシュの問題を解決するはずです(ただ、BarsTocalculateを大きすぎず小さすぎずの適度な値に保ってください。私はデフォルトとして1000を使用し、それはそのように問題ないようです)。試してみましょう。 ファイル: macfibo_v1.1_1.mq4 6 kb 1...231232233234235236237238239240241242243244245...786 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
選択できるオプションを追加することはできないのでしょうか?
例えば
別々、購入、別売り
修正しました。BEはすべて0、または+1、または+2ピップを購入するか、またはすべてのBE 0、1または2ピップを販売?
それは可能ですか?
be.mq4
こんにちは、Mladen 。
私はFX Genを使い、mq4コンパイラやオンラインフォーラムの例を参考にスニペットやコードを使ってEAを書いています。
void OpenNewTrade()
{ datetime lastTime = 0;
int lastTicket = -1; // なしオープン。
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
&& Ask - OrderOpenPrice() >= Grid*PipValue*Point
{
{
BuyOrder();
}
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
&& OrderOpenPrice() - Bid >= Grid*PipValue*Point
{
{
SellOrder();
}
}
}
return(lastTicket);
その他
Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print");
}
あなたは、このコードを見てみることができます 日付と注文チケットを使用して、最初に最も古い順序を削除しようとしている、例えば、開かれた順序> 2は、最も古い順序を削除します。
//-------------------------------------------------------------
// Etasoft Inc.Forex EA and Script Generator バージョン4.1 EA
//-------------------------------------------------------------
// キーワードMT4、Forex EAビルダー、EA作成、Expert Advisorデベロッパー
#property copyright "Copyright © 2011, Etasoft Inc.Forex EA ジェネレーター v4.1"
#property link
#include
#インクルード
// エクスポートされた変数
extern int OrderId = 1;
extern int Slippage = 2;
extern double Lots = 0.01;
extern int MaxOrdersAllowed = 2;// 買い注文と売り注文の両方が可能
extern int Grid = 10; // 注文を開くまでの合計距離(pips単位
extern string EAComment = "564テスト";
// ローカル変数
double PipValue=1; // この変数は、5桁のブローカーをサポートするために用意されました。
bool Terminated = false;
string LF = "\n"; // 改行が必要なカスタムブロックやユーティリティブロックに使用します。
int NDigits = 4; // 主にFlexタイプのブロックのNormalizeDoubleに使用されます。
int ObjCount = 0; // チャート上に作成された全オブジェクトの数、ユニークな名前のオブジェクトを作成可能
int current = 0;
int init()
{
NDigits = Digits;
if (false) ObjectsDeleteAll(); // チャートを消去します。
Comment(""); // チャートを消去します。
}
// エキスパート・スタート
int start()
{
if (Bars < 10)
{
Comment("バーが足りません");
return (0);
if (終端 == true)
{
Comment("EAが終了しました。");
return (0);
}
OnEveryTick1();
}
void OnEveryTick1()
{
if (true == false && false) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5))PipValue = 10;
IfOrderDoesNotExist2()。
IfOrderDoesNotExist4();
MaximumOrder()。
void IfOrderDoesNotExist2()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
exists = true。
}
}
さもなくば
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print");
}
if (exists == false)
{
BuyPendingOrder()を実行します。
}
}
void IfOrderDoesNotExist4()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
exists = true。
}
さもなくば
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print");
}
if (exists == false)
{
SellPendingOrder()を実行します。
}
}
void BuyPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point.Double SL = price - 0*PipValue*Point;
double SL = price - 0*PipValue*Point;
if (0 == 0) SL = 0;
double TP = price + 0*PipValue*Point;
if (0 == 0) TP = 0;
if (0 == 0) expire = 0;
int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue);
if (チケット == -1)
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
}
void SellPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point.Double SL = price + 0*PipValue*Point;
double SL = price + 0*PipValue*Point;
if (0 == 0) SL = 0;
double TP = price - 0*PipValue*Point;
if (0 == 0) TP = 0;
if (0 == 0) expire = 0;
int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red);
if (ticket == -1)
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
}
void MaximumOrder()
{
if (MaxOrdersAllowed> 0)
{
OrderCount();
}
void OrderCount()
{
int count = 0;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol())
if (OrderMagicNumber() == OrderId)
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
count++;
}
}
さもなくば
{
Print("OrderSend() error - ", ErrorDescription(GetLastError())).Print("OrderSend() error - ", ErrorDescription(GetLastError()).Print");
}
if (count > MaxOrdersAllowed )
{
DeleteOldestOrder()を実行します。
}
}
void DeleteOldestOrder()
{
datetime lastTime = 0;
int lastTicket = -1; // どれも開いていません。
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket ))
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
if (OrderType() == OP_BUY || OrderType() == OP_SELL )
{
{
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);
}
}
}
return(lastTicket);
その他
Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print");
}
int deinit()
{
if (false) ObjectsDeleteAll();
こんにちは、Mladen 。
私は主にFX Genを使い、mq4コンパイラやオンラインフォーラムの例を参考にスニペットやコードを使ってEAを作成しています。
void OpenNewTrade()
{ datetime lastTime = 0;
int lastTicket = -1; // なしオープン。
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
&& Ask - OrderOpenPrice() >= Grid*PipValue*Point
{
{
BuyOrder();
}
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
&& OrderOpenPrice() - Bid >= Grid*PipValue*Point
{
{
SellOrder();
}
}
}
return(lastTicket);
その他
Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print");
}
あなたは、このコードを見てみることができます 日付と注文チケットを使用して、最初に最も古い順序を削除しようとしている、例えば、開かれた順序> 2は、最も古い順序を削除します。
//-------------------------------------------------------------
// Etasoft Inc.Forex EA and Script Generator バージョン4.1 EA
//-------------------------------------------------------------
// キーワードMT4、Forex EAビルダー、EA作成、Expert Advisorデベロッパー
#property copyright "Copyright © 2011, Etasoft Inc.Forex EA ジェネレーター v4.1"
#property link
#include
#インクルード
// エクスポートされた変数
extern int OrderId = 1;
extern int Slippage = 2;
extern double Lots = 0.01;
extern int MaxOrdersAllowed = 2;// 買い注文と売り注文の両方が可能
extern int Grid = 10; // 注文を開くまでの合計距離(pips単位
extern string EAComment = "564テスト";
// ローカル変数
double PipValue=1; // この変数は、5桁のブローカーをサポートするために用意されました。
bool Terminated = false;
string LF = "\n"; // 改行が必要なカスタムブロックやユーティリティブロックに使用します。
int NDigits = 4; // 主にFlexタイプのブロックのNormalizeDoubleに使用されます。
int ObjCount = 0; // チャート上に作成された全オブジェクトの数、ユニークな名前のオブジェクトを作成可能
int current = 0;
int init()
{
NDigits = Digits;
if (false) ObjectsDeleteAll(); // チャートを消去します。
Comment(""); // チャートを消去します。
}
// エキスパート・スタート
int start()
{
if (Bars < 10)
{
Comment("バーが足りません");
return (0);
if (終端 == true)
{
Comment("EAが終了しました。");
return (0);
}
OnEveryTick1();
}
void OnEveryTick1()
{
if (true == false && false) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5))PipValue = 10;
IfOrderDoesNotExist2()。
IfOrderDoesNotExist4();
MaximumOrder()。
void IfOrderDoesNotExist2()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
exists = true。
}
}
さもなくば
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print");
}
if (exists == false)
{
BuyPendingOrder()を実行します。
}
}
void IfOrderDoesNotExist4()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
exists = true。
}
さもなくば
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print");
}
if (exists == false)
{
SellPendingOrder()を実行します。
}
}
void BuyPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point.Double SL = price - 0*PipValue*Point;
double SL = price - 0*PipValue*Point;
if (0 == 0) SL = 0;
double TP = price + 0*PipValue*Point;
if (0 == 0) TP = 0;
if (0 == 0) expire = 0;
int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue);
if (チケット == -1)
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
}
void SellPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point.Double SL = price + 0*PipValue*Point;
double SL = price + 0*PipValue*Point;
if (0 == 0) SL = 0;
double TP = price - 0*PipValue*Point;
if (0 == 0) TP = 0;
if (0 == 0) expire = 0;
int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red);
if (ticket == -1)
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
}
void MaximumOrder()
{
if (MaxOrdersAllowed> 0)
{
OrderCount();
}
void OrderCount()
{
int count = 0;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol())
if (OrderMagicNumber() == OrderId)
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
count++;
}
}
さもなくば
{
Print("OrderSend() error - ", ErrorDescription(GetLastError())).Print("OrderSend() error - ", ErrorDescription(GetLastError()).Print");
}
if (count > MaxOrdersAllowed )
{
DeleteOldestOrder()を実行します。
}
}
void DeleteOldestOrder()
{
datetime lastTime = 0;
int lastTicket = -1; // どれも開いていません。
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket ))
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
if (OrderType() == OP_BUY || OrderType() == OP_SELL )
{
{
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);
}
}
}
return(lastTicket);
その他
Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print");
}
int deinit()
{
if (false) ObjectsDeleteAll();
}
このような関数を 使用してみてください。
{
datetime lastTime = Time[0]+Period()*60;
int lastTicket = -1; // None open.
for (int i=OrdersTotal()-1; i >= 0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if ((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() <= lastTime)
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
}
}
if (lastTicket>-1)
if (OrderSelect(lastTicket,SELECT_BY_TICKET,MODE_TRADES))
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);
}Mladenさん、ありがとうございます。
このような長いコードをフォーラムに投稿して申し訳ありません。まだインターフェースに慣れていないのです。ありがとうございました。
インジケータが自動的に更新されません。
私の取引に非常に適したインジケータがあります。
残念なことに、このインジケータは自動的には更新されません。常に手動で更新しなければなりません。
この問題を解決する方法はありますか?
それは非常に有用であろう!!
事前にありがとうございました。
追伸:私が持っているすべてを添付しました。
彼は通知のSMSを望んでいる。どのようにコードを見ますか?
彼は通知のSMSを望んでいます。どのようなコードに見えますか?
ポープ30
次のようにします。
SendNotification("notification message that you want to send");
あなたの電話番号は?私の番号は0039 555-23-45です。どこに入力するのですか?
例
#property indicator_minimum -1.1
#property indicator_maximum 1.1
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Lime
extern int period = 25;
extern int limit = 5000;
double g_ibuf_84[];
double g_ibuf_88[];
double g_ibuf_92[];
int init() {
IndicatorBuffers(3);
SetIndexStyle(0, DRAW_ARROW);
SetIndexStyle(1, DRAW_ARROW);
SetIndexStyle(2, DRAW_NONE);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexArrow(0, 233);
SetIndexArrow(1, 234);
SetIndexBuffer(0, g_ibuf_88);
SetIndexBuffer(1, g_ibuf_92);
SetIndexBuffer(2, g_ibuf_84);
IndicatorShortName("BR16");
return (0);
}
int start() {
double ld_72;
double ld_24 = 0;
double ld_32 = 0;
double ld_unused_40 = 0;
double ld_unused_48 = 0;
double ld_56 = 0;
double ld_unused_64 = 0;
double l_low_80 = 0;
double l_high_88 = 0;
for (int li_96 = 0; li_96 <= limit; li_96++) {
g_ibuf_88[li_96] = 0;
g_ibuf_92[li_96] = 0;
}
for (li_96 = 0; li_96 <= limit; li_96++) {
l_high_88 = High;
l_low_80 = Low;
ld_72 = (High[li_96] + Low[li_96]) / 2.0;
if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;
else ld_24 = 0.0;
ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);
g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;
ld_32 = ld_24;
ld_56 = g_ibuf_84[li_96];
}
for (li_96 = 0; li_96 <= limit; li_96++) {
if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;
if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;
}
return (0);
}そして、どこに自分の電話番号を入れるのですか?私の番号 0039 555-23-45 です。どこに入力するのですか?
例
#property indicator_minimum -1.1
#property indicator_maximum 1.1
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Lime
extern int period = 25;
extern int limit = 5000;
double g_ibuf_84[];
double g_ibuf_88[];
double g_ibuf_92[];
int init() {
IndicatorBuffers(3);
SetIndexStyle(0, DRAW_ARROW);
SetIndexStyle(1, DRAW_ARROW);
SetIndexStyle(2, DRAW_NONE);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexArrow(0, 233);
SetIndexArrow(1, 234);
SetIndexBuffer(0, g_ibuf_88);
SetIndexBuffer(1, g_ibuf_92);
SetIndexBuffer(2, g_ibuf_84);
IndicatorShortName("BR16");
return (0);
}
int start() {
double ld_72;
double ld_24 = 0;
double ld_32 = 0;
double ld_unused_40 = 0;
double ld_unused_48 = 0;
double ld_56 = 0;
double ld_unused_64 = 0;
double l_low_80 = 0;
double l_high_88 = 0;
for (int li_96 = 0; li_96 <= limit; li_96++) {
g_ibuf_88[li_96] = 0;
g_ibuf_92[li_96] = 0;
}
for (li_96 = 0; li_96 <= limit; li_96++) {
l_high_88 = High;
l_low_80 = Low;
ld_72 = (High[li_96] + Low[li_96]) / 2.0;
if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;
else ld_24 = 0.0;
ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);
g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;
ld_32 = ld_24;
ld_56 = g_ibuf_84[li_96];
}
for (li_96 = 0; li_96 <= limit; li_96++) {
if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;
if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;
}
return (0);
}これは、あなたがそれを行うことができます良い説明です。
インジケータが自動的に更新されない。
ここに私の取引に非常に適したインジケータがあります。
残念なことに、彼は自分自身で更新されません。私は常に手動で彼が更新されることをリフレッシュする必要があります。
この問題を解決する方法はありますか?
それは非常に有用であろう!!
事前にありがとうございました。
追伸:手持ちのものをすべて添付しました。ジム
全体を書き直す代わりに、バーを計算 するための制限を追加し、その後、すべてのこれらのバーが再計算されます。これは、リフレッシュの問題を解決するはずです(ただ、BarsTocalculateを大きすぎず小さすぎずの適度な値に保ってください。私はデフォルトとして1000を使用し、それはそのように問題ないようです)。試してみましょう。