どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 1095 1...108810891090109110921093109410951096109710981099110011011102...1178 新しいコメント A13ksandr 2016.09.13 02:49 #10941 alvlaf: このコードはMQL5で書かれているのでしょうか?for (int i=0; i<SymbolCount; i++){if (CountTrades() == 0) // 注文数はゼロでなければなりません。{if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) |||)(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))&& MaxOpenOrders > OrdersTotal())// 最後の取引が負けている場合、同じ取引が開始されますが、ロットはより大きくなります。{Type = TypeLastHistOrder();if (Type == OP_BUY) Price =LastAsk;if (Type == OP_SELL) Price =LastBid;Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2)です。ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);}if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0&& MaxOpenOrders > OrdersTotal())//最後の取引の利益が ゼロに等しい場合、同じ取引が開始されます。{Type = TypeLastHistOrder();if (Type == OP_BUY) Price =LastAsk;if (Type == OP_SELL) Price =LastBid;Lot = NormalizeDouble(LotsLastHistOrder(), 2)。ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)}if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))|| CountHistTrades() == 0)// 最後の取引で利益が出た場合、注文が開かれます。{if (SignalBuy(Symbols[i]) && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)}if (SignalSell(Symbols[i]) && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbols[i], OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)}}}}単語などの 後にOnTickでコード。MQL4で書かれていますが、MQL5が必要ですか?各 OrderSend において、MaxOpenOrders の条件は OrdersTotal() よりも大きくならないようにする必要があります。手順コード(OrderSymbol()==Symbol()を削除し、Close/Openの代わりにiClose()/iOpen()を入力)、コードの正誤チェックはしていません。//+------------------------------------------------------------------+int CountTrades(int type = -1){int cnt = 0;for (int i=OrdersTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))cnt++です。}}return(cnt);}//+------------------------------------------------------------------+int CountHistTrades(int type = -1){int cnt = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))cnt++です。}}return(cnt);}//+------------------------------------------------------------------+bool SignalBuy(文字列Sym){for (int i=1; i<=Wait; i++){double C = iClose(Sym, PERIOD_M5, i); // ここで必要なタイムフレームを 指定する。double O = iOpen(Sym, PERIOD_M5, i);if(C > O) return(false);}if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout)))&& CountHistTrades() > 0) return(true);if (CountHistTrades() == 0) return(true);return(false)です。}//+------------------------------------------------------------------+bool SignalSell(文字列Sym){for (int i=1; i<=Wait; i++){double C = iClose(Sym, PERIOD_M5, i); // ここで必要なタイムフレームを 指定する。double O = iOpen(Sym, PERIOD_M5, i);if(C < O) return(false);}if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout)))&& CountHistTrades() > 0) return(true);if (CountHistTrades() == 0) return(true);return(false)です。}//+------------------------------------------------------------------+datetime TimeLastHistOrder(int type = -1){datetime lasttime = 0;datetime opentime = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){if (OrderCloseTime() > lasttime){lasttime = OrderCloseTime();opentime = OrderOpenTime();}}}}return(opentime);}//+------------------------------------------------------------------+int TypeLastHistOrder(){datetime time = 0;int type = -1;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic){if (OrderCloseTime() > time){time = OrderCloseTime();type = OrderType();}}}}return(type)です。}//+------------------------------------------------------------------+double LotsLastHistOrder(int type = -1){datetime time = 0;ダブルロット = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){if (OrderOpenTime() > time){time = OrderOpenTime();time = OrderLots();}}}}return(lots)です。}//+------------------------------------------------------------------+double PriceCloseLastHistOrder(int type = -1){datetime time = 0;二重価格 = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){if (OrderCloseTime() > time){time = OrderCloseTime();price = OrderClosePrice()。}}}}return(price)です。}//+------------------------------------------------------------------+double PriceOpenLastHistOrder(int type = -1){datetime time = 0;二重価格 = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){if (OrderCloseTime() > time){time = OrderCloseTime();price = OrderOpenPrice();}}}}return(price)です。} Any rookie question, so MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 目利きの方に質問です A13ksandr 2016.09.13 02:53 #10942 alvlaf:extern int Exp = 1;ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0,IntegerToString(Exp), Magic)です。このコードで大丈夫ですか?日付はここで、現在の日付より10分大きいものでなければならない(すなわち、TimeCurrent() + 600最小)。 Aleksandr Afanasenko 2016.09.13 05:11 #10943 A13ksandr:for (int i=0; i<SymbolCount; i++){if (CountTrades() == 0) // 注文数はゼロでなければなりません。{if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) |||)(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))&& MaxOpenOrders > OrdersTotal())// 最後の取引が負けている場合、同じ取引が開始されますが、ロットはより大きくなります。{Type = TypeLastHistOrder();if (Type == OP_BUY) Price =LastAsk;if (Type == OP_SELL) Price =LastBid;Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2)です。ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);}if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0&& MaxOpenOrders > OrdersTotal())// 最後の取引の利益がゼロに等しい場合、同じ取引が開始されます。{Type = TypeLastHistOrder();if (Type == OP_BUY) Price =LastAsk;if (Type == OP_SELL) Price =LastBid;Lot = NormalizeDouble(LotsLastHistOrder(), 2);ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)}if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))|| CountHistTrades() == 0)// 最後の取引が利益を生んだ場合、注文が開かれます。{if (SignalBuy(Symbols[i]) && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)}if (SignalSell(Symbols[i]) && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbols[i], OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)}}}}単語などの 後にOnTickでコード。MQL4で書かれていますが、MQL5が必要ですか?各 OrderSend において、MaxOpenOrders の条件は OrdersTotal() よりも大きくならないようにする必要があります。手順コード(OrderSymbol()==Symbol()を削除し、Close/Openの代わりにiClose()/iOpen()を入力)、コードの正誤チェックはしていません。//+------------------------------------------------------------------+int CountTrades(int type = -1){int cnt = 0;for (int i=OrdersTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))cnt++です。}}return(cnt);}//+------------------------------------------------------------------+int CountHistTrades(int type = -1){int cnt = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))cnt++です。}}return(cnt);}//+------------------------------------------------------------------+bool SignalBuy(文字列Sym){for (int i=1; i<=Wait; i++){double C = iClose(Sym, PERIOD_M5, i); // ここで必要なタイムフレームを 指定する。double O = iOpen(Sym, PERIOD_M5, i);if(C > O) return(false);}if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout)))&& CountHistTrades() > 0) return(true);if (CountHistTrades() == 0) return(true);return(false)です。}//+------------------------------------------------------------------+bool SignalSell(文字列Sym){for (int i=1; i<=Wait; i++){double C = iClose(Sym, PERIOD_M5, i); // ここで必要なタイムフレームを 指定する。double O = iOpen(Sym, PERIOD_M5, i);if(C < O) return(false);}if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout)))&& CountHistTrades() > 0) return(true);if (CountHistTrades() == 0) return(true);return(false)です。}//+------------------------------------------------------------------+datetime TimeLastHistOrder(int type = -1){datetime lasttime = 0;datetime opentime = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){if (OrderCloseTime() > lasttime){lasttime = OrderCloseTime();opentime = OrderOpenTime();}}}}return(opentime);}//+------------------------------------------------------------------+int TypeLastHistOrder(){datetime time = 0;int type = -1;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic){if (OrderCloseTime() > time){time = OrderCloseTime();type = OrderType();}}}}return(type)です。}//+------------------------------------------------------------------+double LotsLastHistOrder(int type = -1){datetime time = 0;ダブルロット = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){if (OrderOpenTime() > time){time = OrderOpenTime();time = OrderLots();}}}}return(lots)です。}//+------------------------------------------------------------------+double PriceCloseLastHistOrder(int type = -1){datetime time = 0;二重価格 = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){if (OrderCloseTime() > time){time = OrderCloseTime();price = OrderClosePrice()。}}}}return(price)です。}//+------------------------------------------------------------------+double PriceOpenLastHistOrder(int type = -1){datetime time = 0;二重価格 = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){if (OrderCloseTime() > time){time = OrderCloseTime();price = OrderOpenPrice();}}}}return(price)です。}何度かエラーを出し、直せなかった。どうしたんですか?//+------------------------------------------------------------------+//| BB1.mq4//| Copyright 2016, MetaQuotes Software Corp.//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2016, MetaQuotes Software Corp.#プロパティリンク "https://www.mql5.com"#property version "1.00"#プロパティの厳密さextern double Lots = 1; // ロット数extern int Exp = 1; // 有効期限extern int Wait = 2; // 一方向のローソク足の本数extern int Timeout = 1; // タイムスロットextern double Multiplier = 3; // 乗算器extern int Slippage = 5; // スリッページextern int Magic = 774274; // マジックextern int MaxOpenOrders = 1; // 最大注文数int ticket, Type, SymbolCount;ダブルプライス、ロットinput string TradeSymbols = "EURUSD_OP, GBPUSD_OP, AUDUSD_OP, NZDUSD_OP, USDCAD_OP, USDCHF_OP, GBPCAD_OP, AUDNZD_OP, CHFJPY_OP, GBPCHF_OP"; // 取引用のシンボルを表示します。string Symbols[50]; // 50は最大シンボル数です。//--------------------------------------------------int OnInit(){if (IsTesting() || !ExtractSymbols()){SymbolCount = 1;Symbols[0] = Symbol()。}return(INIT_SUCCEEDED);}//--------------------------------------------------bool ExtractSymbols(){ushort Comma = StringGetCharacter(",", 0);SymbolCount = StringSplit(TradeSymbols, Comma, Symbols)。for (int i = 0; i < SymbolCount; i++){StringToUpper(Symbols[i])。Symbols[i] = StringTrimRight(Symbols[i]); // 誤ってスペースが入らないようにする。Symbols[i] = StringTrimLeft(Symbols[i])とする。}if (SymbolCount > 0) return(true);return(false)です。}//--------------------------------------------------void OnTick(){for (int i=0; i<SymbolCount; i++){if (CountTrades() == 0) // 注文数はゼロでなければなりません。{if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) |||)(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))&& MaxOpenOrders > OrdersTotal())// 最後の取引が負けている場合、同じ取引が開始されますが、ロットはより大きくなります。{Type = TypeLastHistOrder();if (Type == OP_BUY) Price = LastAsk;if (Type == OP_SELL) Price = LastBid;Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2)です。ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);}if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal())// 最後の取引の利益がゼロに等しい場合、同じ取引が開始されます。{Type = TypeLastHistOrder();if (Type == OP_BUY) Price = LastAsk;if (Type == OP_SELL) Price = LastBid;Lot = NormalizeDouble(LotsLastHistOrder(), 2)。ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)}if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))|| CountHistTrades() == 0)// 最後の取引で利益が出た場合、注文が開かれます。{if (SignalBuy(Symbols[i]) && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)}if (SignalSell(Symbols[i]) && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbols[i], OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)}}}}//+------------------------------------------------------------------+int CountTrades(int type = -1){int cnt = 0;for (int i=OrdersTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))cnt++です。}}return(cnt);}//+------------------------------------------------------------------+int CountHistTrades(int type = -1){int cnt = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))cnt++です。}}return(cnt);}//+------------------------------------------------------------------+bool SignalBuy(文字列Sym){for (int i=1; i<=Wait; i++){double C = iClose(Sym, PERIOD_M5, i); // ここで必要なタイムフレームを指定する。double O = iOpen(Sym, PERIOD_M5, i);if (C > O) return(false);}if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout)))&& CountHistTrades() > 0) return(true);if (CountHistTrades() == 0) return(true);return(false)です。}//+------------------------------------------------------------------+bool SignalSell(文字列Sym){for (int i=1; i<=Wait; i++){double C = iClose(Sym, PERIOD_M5, i); // ここで必要なタイムフレームを指定する。double O = iOpen(Sym, PERIOD_M5, i);if (C < O) return(false);}if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout)))&& CountHistTrades() > 0) return(true);if (CountHistTrades() == 0) return(true);return(false)です。}//+------------------------------------------------------------------+datetime TimeLastHistOrder(int type = -1){datetime lasttime = 0;datetime opentime = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){if (OrderCloseTime() > lasttime){lasttime = OrderCloseTime();opentime = OrderOpenTime();}}}}return(opentime);}//+------------------------------------------------------------------+int TypeLastHistOrder(){datetime time = 0;int type = -1;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic){if (OrderCloseTime() > time){time = OrderCloseTime();type = OrderType();}}}}return(type)です。}//+------------------------------------------------------------------+double LotsLastHistOrder(int type = -1){datetime time = 0;ダブルロット = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){if (OrderOpenTime() > time){time = OrderOpenTime();time = OrderLots();}}}}return(lots)です。}//+------------------------------------------------------------------+double PriceCloseLastHistOrder(int type = -1){datetime time = 0;二重価格 = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){if (OrderCloseTime() > time){time = OrderCloseTime();price = OrderClosePrice()。}}}}return(price)です。}//+------------------------------------------------------------------+double PriceOpenLastHistOrder(int type = -1){datetime time = 0;二重価格 = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){if (OrderCloseTime() > time){time = OrderCloseTime();price = OrderOpenPrice();}}}}return(price)です。} Any rookie question, so MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 [警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 gloomy159 2016.09.13 06:01 #10944 みんな、助けて。私はStforexのMT4プラットフォームで取引しています。注文を出すときに、チャート上にエントリーレベルが表示されない(点線が ない)ので、ストップロスを入れるのに都合が悪い。何が悪いのか、どうすれば直るのか、誰か知っているかも? 削除済み 2016.09.13 06:15 #10945 gloomy159: みんな、助けて。私はStforexのMT4プラットフォームで取引しています。注文を出すときに、チャート上にエントリーレベルが表示されない(点線がない)ので、ストップロスを入れるのに都合が悪い。何が悪いのか、どうすれば直るのか、わかる人はいるかも?http://prntscr.com/chfa36設定 - チャート -トレーディングレベルを 表示する 削除済み 2016.09.13 06:16 #10946 皆さん、どのような関数がエラー65を返すのでしょうか?err_invalid_account65口座番号の 誤り gloomy159 2016.09.13 06:21 #10947 testerMT4:http://prntscr.com/chfa36設定 - チャート - トレーディングレベルを表示する この機能は初期状態で有効になっていますが、まだチャート上にレベルが表示されません Vitalie Postolache 2016.09.13 07:12 #10948 gloomy159: この機能はもともとオンになっているが、それでもレベルがグラフに表示されない カラー設定で、ボリュームに 割り当てられたカラーが 背景色と一致していないか確認する。 A13ksandr 2016.09.14 02:19 #10949 alvlaf:何度かエラーを出し、修正できない。どうしたんですか?OnTickとLastAskとLastBidの変数に閉じ括弧を追加するのを忘れています。以下は、エラーなくコンパイルできるコードです。機能は確認していません。//+------------------------------------------------------------------+//| BB1.mq4//| Copyright 2016, MetaQuotes Software Corp.//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2016, MetaQuotes Software Corp."#プロパティリンク "https://www.mql5.com"#property version "1.00"#プロパティの厳密さextern double Lots = 1; // ロット数extern int Exp = 1; // 有効期限extern int Wait = 2; // 一方向のローソク足の本数extern int Timeout = 1; // タイムスロットextern double Multiplier = 3; // 乗算器extern int Slippage = 5; // スリッページextern int Magic = 774274; // マジックextern int MaxOpenOrders = 1; // 最大注文数int ticket, Type, SymbolCount;ダブルプライス、ロットinput string TradeSymbols = "EURUSD_OP, GBPUSD_OP, AUDUSD_OP, NZDUSD_OP, USDCAD_OP, USDCHF_OP, GBPCAD_OP, AUDNZD_OP, CHFJPY_OP, GBPCHF_OP"; // 取引用のシンボルを表示します。string Symbols[50]; // 50は最大シンボル数です。//--------------------------------------------------int OnInit(){if (IsTesting() || !ExtractSymbols()){SymbolCount = 1;Symbols[0] = Symbol()。}return(INIT_SUCCEEDED);}//--------------------------------------------------bool ExtractSymbols(){ushort Comma = StringGetCharacter(",", 0);SymbolCount = StringSplit(TradeSymbols, Comma, Symbols)。for (int i = 0; i < SymbolCount; i++){StringToUpper(Symbols[i])。Symbols[i] = StringTrimRight(Symbols[i]); // 誤ってスペースが入らないようにする。Symbols[i] = StringTrimLeft(Symbols[i])とする。}if (SymbolCount > 0) return(true);return(false)です。}//--------------------------------------------------void OnTick(){for (int i=0; i<SymbolCount; i++){double LastAsk = SymbolInfoDouble(Symbols[i], SYMBOL_ASK);double LastBid = SymbolInfoDouble(Symbols[i], SYMBOL_BID);if (CountTrades() == 0) // 注文数はゼロに等しい必要があります。{if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) |||)(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))&& MaxOpenOrders > OrdersTotal())// 最後の取引が負けている場合、同じ取引が開始されますが、ロットはより大きくなります。{Type = TypeLastHistOrder();if (Type == OP_BUY) Price = LastAsk;if (Type == OP_SELL) Price = LastBid;Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2)です。ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);}if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal())// 最後の取引の利益がゼロに等しい場合、同じ取引が開始されます。{Type = TypeLastHistOrder();if (Type == OP_BUY) Price = LastAsk;if (Type == OP_SELL) Price = LastBid;Lot = NormalizeDouble(LotsLastHistOrder(), 2)。ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)}if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))|| CountHistTrades() == 0)// 最後の取引で利益が出た場合、注文が開かれます。{if (SignalBuy(Symbols[i]) && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)}if (SignalSell(Symbols[i]) && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbols[i], OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)}}}}}//+------------------------------------------------------------------+int CountTrades(int type = -1){int cnt = 0;for (int i=OrdersTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))cnt++です。}}return(cnt);}//+------------------------------------------------------------------+int CountHistTrades(int type = -1){int cnt = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))cnt++です。}}return(cnt);}//+------------------------------------------------------------------+bool SignalBuy(文字列Sym){for (int i=1; i<=Wait; i++){double C = iClose(Sym, PERIOD_M5, i); // ここで必要なタイムフレームを指定する。double O = iOpen(Sym, PERIOD_M5, i);if (C > O) return(false);}if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout)))&& CountHistTrades() > 0) return(true);if (CountHistTrades() == 0) return(true);return(false)です。}//+------------------------------------------------------------------+bool SignalSell(文字列Sym){for (int i=1; i<=Wait; i++){double C = iClose(Sym, PERIOD_M5, i); // ここで必要なタイムフレームを指定する。double O = iOpen(Sym, PERIOD_M5, i);if (C < O) return(false);}if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout)))&& CountHistTrades() > 0) return(true);if (CountHistTrades() == 0) return(true);return(false)です。}//+------------------------------------------------------------------+datetime TimeLastHistOrder(int type = -1){datetime lasttime = 0;datetime opentime = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){if (OrderCloseTime() > lasttime){lasttime = OrderCloseTime();opentime = OrderOpenTime();}}}}return(opentime);}//+------------------------------------------------------------------+int TypeLastHistOrder(){datetime time = 0;int type = -1;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic){if (OrderCloseTime() > time){time = OrderCloseTime();type = OrderType();}}}}return(type)です。}//+------------------------------------------------------------------+double LotsLastHistOrder(int type = -1){datetime time = 0;ダブルロット = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){if (OrderOpenTime() > time){time = OrderOpenTime();time = OrderLots();}}}}return(lots)です。}//+------------------------------------------------------------------+double PriceCloseLastHistOrder(int type = -1){datetime time = 0;二重価格 = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){if (OrderCloseTime() > time){time = OrderCloseTime();price = OrderClosePrice()。}}}}return(price)です。}//+------------------------------------------------------------------+double PriceOpenLastHistOrder(int type = -1){datetime time = 0;二重価格 = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){if (OrderCloseTime() > time){time = OrderCloseTime();price = OrderOpenPrice();}}}}return(price)です。} Any rookie question, so MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 [警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 Nauris Zukas 2016.09.14 06:14 #10950 こんにちは。TPでポジションがクローズ したかどうかは、どのように判断するのですか?OrderClosePrice()==OrderTakeProfit()の使い方が 正しいとは思えません。 1...108810891090109110921093109410951096109710981099110011011102...1178 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
このコードはMQL5で書かれているのでしょうか?
for (int i=0; i<SymbolCount; i++)
{
if (CountTrades() == 0) // 注文数はゼロでなければなりません。
{
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) |||)
(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))&& MaxOpenOrders > OrdersTotal())
// 最後の取引が負けている場合、同じ取引が開始されますが、ロットはより大きくなります。
{
Type = TypeLastHistOrder();
if (Type == OP_BUY) Price =LastAsk;
if (Type == OP_SELL) Price =LastBid;
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2)です。
ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0&& MaxOpenOrders > OrdersTotal())
//最後の取引の利益が ゼロに等しい場合、同じ取引が開始されます。
{
Type = TypeLastHistOrder();
if (Type == OP_BUY) Price =LastAsk;
if (Type == OP_SELL) Price =LastBid;
Lot = NormalizeDouble(LotsLastHistOrder(), 2)。
ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))
|| CountHistTrades() == 0)// 最後の取引で利益が出た場合、注文が開かれます。
{
if (SignalBuy(Symbols[i]) && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
if (SignalSell(Symbols[i]) && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
}
}
}
単語などの 後にOnTickでコード。MQL4で書かれていますが、MQL5が必要ですか?
各 OrderSend において、MaxOpenOrders の条件は OrdersTotal() よりも大きくならないようにする必要があります。
手順コード(OrderSymbol()==Symbol()を削除し、Close/Openの代わりにiClose()/iOpen()を入力)、コードの正誤チェックはしていません。
//+------------------------------------------------------------------+
int CountTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++です。
}
}
return(cnt);
}
//+------------------------------------------------------------------+
int CountHistTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++です。
}
}
return(cnt);
}
//+------------------------------------------------------------------+
bool SignalBuy(文字列Sym)
{
for (int i=1; i<=Wait; i++)
{
double C = iClose(Sym, PERIOD_M5, i); // ここで必要なタイムフレームを 指定する。
double O = iOpen(Sym, PERIOD_M5, i);
if(C > O) return(false);
}
if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout)))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false)です。
}
//+------------------------------------------------------------------+
bool SignalSell(文字列Sym)
{
for (int i=1; i<=Wait; i++)
{
double C = iClose(Sym, PERIOD_M5, i); // ここで必要なタイムフレームを 指定する。
double O = iOpen(Sym, PERIOD_M5, i);
if(C < O) return(false);
}
if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout)))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false)です。
}
//+------------------------------------------------------------------+
datetime TimeLastHistOrder(int type = -1)
{
datetime lasttime = 0;
datetime opentime = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > lasttime)
{
lasttime = OrderCloseTime();
opentime = OrderOpenTime();
}
}
}
}
return(opentime);
}
//+------------------------------------------------------------------+
int TypeLastHistOrder()
{
datetime time = 0;
int type = -1;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic)
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
type = OrderType();
}
}
}
}
return(type)です。
}
//+------------------------------------------------------------------+
double LotsLastHistOrder(int type = -1)
{
datetime time = 0;
ダブルロット = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderOpenTime() > time)
{
time = OrderOpenTime();
time = OrderLots();
}
}
}
}
return(lots)です。
}
//+------------------------------------------------------------------+
double PriceCloseLastHistOrder(int type = -1)
{
datetime time = 0;
二重価格 = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
price = OrderClosePrice()。
}
}
}
}
return(price)です。
}
//+------------------------------------------------------------------+
double PriceOpenLastHistOrder(int type = -1)
{
datetime time = 0;
二重価格 = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
price = OrderOpenPrice();
}
}
}
}
return(price)です。
}
extern int Exp = 1;
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0,IntegerToString(Exp), Magic)です。
このコードで大丈夫ですか?日付はここで、現在の日付より10分大きいものでなければならない(すなわち、TimeCurrent() + 600最小)。
for (int i=0; i<SymbolCount; i++)
{
if (CountTrades() == 0) // 注文数はゼロでなければなりません。
{
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) |||)
(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))&& MaxOpenOrders > OrdersTotal())
// 最後の取引が負けている場合、同じ取引が開始されますが、ロットはより大きくなります。
{
Type = TypeLastHistOrder();
if (Type == OP_BUY) Price =LastAsk;
if (Type == OP_SELL) Price =LastBid;
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2)です。
ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0&& MaxOpenOrders > OrdersTotal())
// 最後の取引の利益がゼロに等しい場合、同じ取引が開始されます。
{
Type = TypeLastHistOrder();
if (Type == OP_BUY) Price =LastAsk;
if (Type == OP_SELL) Price =LastBid;
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))
|| CountHistTrades() == 0)// 最後の取引が利益を生んだ場合、注文が開かれます。
{
if (SignalBuy(Symbols[i]) && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
if (SignalSell(Symbols[i]) && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
}
}
}
単語などの 後にOnTickでコード。MQL4で書かれていますが、MQL5が必要ですか?
各 OrderSend において、MaxOpenOrders の条件は OrdersTotal() よりも大きくならないようにする必要があります。
手順コード(OrderSymbol()==Symbol()を削除し、Close/Openの代わりにiClose()/iOpen()を入力)、コードの正誤チェックはしていません。
//+------------------------------------------------------------------+
int CountTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++です。
}
}
return(cnt);
}
//+------------------------------------------------------------------+
int CountHistTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++です。
}
}
return(cnt);
}
//+------------------------------------------------------------------+
bool SignalBuy(文字列Sym)
{
for (int i=1; i<=Wait; i++)
{
double C = iClose(Sym, PERIOD_M5, i); // ここで必要なタイムフレームを 指定する。
double O = iOpen(Sym, PERIOD_M5, i);
if(C > O) return(false);
}
if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout)))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false)です。
}
//+------------------------------------------------------------------+
bool SignalSell(文字列Sym)
{
for (int i=1; i<=Wait; i++)
{
double C = iClose(Sym, PERIOD_M5, i); // ここで必要なタイムフレームを 指定する。
double O = iOpen(Sym, PERIOD_M5, i);
if(C < O) return(false);
}
if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout)))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false)です。
}
//+------------------------------------------------------------------+
datetime TimeLastHistOrder(int type = -1)
{
datetime lasttime = 0;
datetime opentime = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > lasttime)
{
lasttime = OrderCloseTime();
opentime = OrderOpenTime();
}
}
}
}
return(opentime);
}
//+------------------------------------------------------------------+
int TypeLastHistOrder()
{
datetime time = 0;
int type = -1;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic)
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
type = OrderType();
}
}
}
}
return(type)です。
}
//+------------------------------------------------------------------+
double LotsLastHistOrder(int type = -1)
{
datetime time = 0;
ダブルロット = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderOpenTime() > time)
{
time = OrderOpenTime();
time = OrderLots();
}
}
}
}
return(lots)です。
}
//+------------------------------------------------------------------+
double PriceCloseLastHistOrder(int type = -1)
{
datetime time = 0;
二重価格 = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
price = OrderClosePrice()。
}
}
}
}
return(price)です。
}
//+------------------------------------------------------------------+
double PriceOpenLastHistOrder(int type = -1)
{
datetime time = 0;
二重価格 = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
price = OrderOpenPrice();
}
}
}
}
return(price)です。
}
何度かエラーを出し、直せなかった。どうしたんですか?
//+------------------------------------------------------------------+みんな、助けて。私はStforexのMT4プラットフォームで取引しています。注文を出すときに、チャート上にエントリーレベルが表示されない(点線がない)ので、ストップロスを入れるのに都合が悪い。何が悪いのか、どうすれば直るのか、わかる人はいるかも?
http://prntscr.com/chfa36
設定 - チャート -トレーディングレベルを 表示する
皆さん、どのような関数がエラー65を返すのでしょうか?
http://prntscr.com/chfa36
設定 - チャート - トレーディングレベルを表示する
この機能はもともとオンになっているが、それでもレベルがグラフに表示されない
何度かエラーを出し、修正できない。どうしたんですか?
OnTickとLastAskとLastBidの変数に閉じ括弧を追加するのを忘れています。以下は、エラーなくコンパイルできるコードです。機能は確認していません。
//+------------------------------------------------------------------+
//| BB1.mq4
//| Copyright 2016, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright"Copyright 2016, MetaQuotes Software Corp."
#プロパティリンク "https://www.mql5.com"
#property version "1.00"
#プロパティの厳密さ
extern double Lots = 1; // ロット数
extern int Exp = 1; // 有効期限
extern int Wait = 2; // 一方向のローソク足の本数
extern int Timeout = 1; // タイムスロット
extern double Multiplier = 3; // 乗算器
extern int Slippage = 5; // スリッページ
extern int Magic = 774274; // マジック
extern int MaxOpenOrders = 1; // 最大注文数
int ticket, Type, SymbolCount;
ダブルプライス、ロット
input string TradeSymbols = "EURUSD_OP, GBPUSD_OP, AUDUSD_OP, NZDUSD_OP, USDCAD_OP, USDCHF_OP, GBPCAD_OP, AUDNZD_OP, CHFJPY_OP, GBPCHF_OP"; // 取引用のシンボルを表示します。
string Symbols[50]; // 50は最大シンボル数です。
//--------------------------------------------------
int OnInit()
{
if (IsTesting() || !ExtractSymbols())
{
SymbolCount = 1;
Symbols[0] = Symbol()。
}
return(INIT_SUCCEEDED);
}
//--------------------------------------------------
bool ExtractSymbols()
{
ushort Comma = StringGetCharacter(",", 0);
SymbolCount = StringSplit(TradeSymbols, Comma, Symbols)。
for (int i = 0; i < SymbolCount; i++)
{
StringToUpper(Symbols[i])。
Symbols[i] = StringTrimRight(Symbols[i]); // 誤ってスペースが入らないようにする。
Symbols[i] = StringTrimLeft(Symbols[i])とする。
}
if (SymbolCount > 0) return(true);
return(false)です。
}
//--------------------------------------------------
void OnTick()
{
for (int i=0; i<SymbolCount; i++)
{
double LastAsk = SymbolInfoDouble(Symbols[i], SYMBOL_ASK);
double LastBid = SymbolInfoDouble(Symbols[i], SYMBOL_BID);
if (CountTrades() == 0) // 注文数はゼロに等しい必要があります。
{
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) |||)
(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))&& MaxOpenOrders > OrdersTotal())
// 最後の取引が負けている場合、同じ取引が開始されますが、ロットはより大きくなります。
{
Type = TypeLastHistOrder();
if (Type == OP_BUY) Price = LastAsk;
if (Type == OP_SELL) Price = LastBid;
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2)です。
ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal())
// 最後の取引の利益がゼロに等しい場合、同じ取引が開始されます。
{
Type = TypeLastHistOrder();
if (Type == OP_BUY) Price = LastAsk;
if (Type == OP_SELL) Price = LastBid;
Lot = NormalizeDouble(LotsLastHistOrder(), 2)。
ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))
|| CountHistTrades() == 0)// 最後の取引で利益が出た場合、注文が開かれます。
{
if (SignalBuy(Symbols[i]) && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
if (SignalSell(Symbols[i]) && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
}
}
}
}
//+------------------------------------------------------------------+
int CountTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++です。
}
}
return(cnt);
}
//+------------------------------------------------------------------+
int CountHistTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++です。
}
}
return(cnt);
}
//+------------------------------------------------------------------+
bool SignalBuy(文字列Sym)
{
for (int i=1; i<=Wait; i++)
{
double C = iClose(Sym, PERIOD_M5, i); // ここで必要なタイムフレームを指定する。
double O = iOpen(Sym, PERIOD_M5, i);
if (C > O) return(false);
}
if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout)))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false)です。
}
//+------------------------------------------------------------------+
bool SignalSell(文字列Sym)
{
for (int i=1; i<=Wait; i++)
{
double C = iClose(Sym, PERIOD_M5, i); // ここで必要なタイムフレームを指定する。
double O = iOpen(Sym, PERIOD_M5, i);
if (C < O) return(false);
}
if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout)))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false)です。
}
//+------------------------------------------------------------------+
datetime TimeLastHistOrder(int type = -1)
{
datetime lasttime = 0;
datetime opentime = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > lasttime)
{
lasttime = OrderCloseTime();
opentime = OrderOpenTime();
}
}
}
}
return(opentime);
}
//+------------------------------------------------------------------+
int TypeLastHistOrder()
{
datetime time = 0;
int type = -1;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic)
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
type = OrderType();
}
}
}
}
return(type)です。
}
//+------------------------------------------------------------------+
double LotsLastHistOrder(int type = -1)
{
datetime time = 0;
ダブルロット = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderOpenTime() > time)
{
time = OrderOpenTime();
time = OrderLots();
}
}
}
}
return(lots)です。
}
//+------------------------------------------------------------------+
double PriceCloseLastHistOrder(int type = -1)
{
datetime time = 0;
二重価格 = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
price = OrderClosePrice()。
}
}
}
}
return(price)です。
}
//+------------------------------------------------------------------+
double PriceOpenLastHistOrder(int type = -1)
{
datetime time = 0;
二重価格 = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
price = OrderOpenPrice();
}
}
}
}
return(price)です。
}
こんにちは。
TPでポジションがクローズ したかどうかは、どのように判断するのですか?OrderClosePrice()==OrderTakeProfit()の使い方が 正しいとは思えません。