任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1095 1...108810891090109110921093109410951096109710981099110011011102...1178 新评论 A13ksandr 2016.09.13 02:49 #10941 alvlaf: 这段代码是用MQL5写的吗?for (int i=0; i<SymbolCount; i++){如果(CountTrades() == 0) // 订单的数量必须为零{如果(((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) ) ||(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL) )&& MaxOpenOrders > OrdersTotal())// 如果最后一笔交易是亏损的,同样的交易将被打开,但手数更多。{类型=TypeLastHistOrder()。如果(Type == OP_BUY) Price =LastAsk;如果(类型==OP_SELL)价格=LastBid。Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)。}如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0&& MaxOpenOrders > OrdersTotal()// 如果最后一笔交易的利润 等于零,则将开出相同的交易{类型=TypeLastHistOrder()。如果(Type == OP_BUY) Price =LastAsk;如果(类型==OP_SELL)价格=LastBid。Lot = NormalizeDouble(LotsLastHistOrder(), 2);ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)}如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL) )|| CountHistTrades() == 0)//如果最后一笔交易是盈利的,订单就会被打开。{如果(SignalBuy(Symbols[i])&& MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)}如果(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(),并输入iClose()/iOpen()而不是Close/Open),我没有检查代码的正确性。//+------------------------------------------------------------------+int CountTrades(int type = -1){int cnt = 0。for (int i=OrdersTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){如果(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--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))cnt++。}}return(cnt)。}//+------------------------------------------------------------------+bool SignalBuy(string Sym){for (int i=1; i<=Wait; i++){double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架。double O = iOpen(Sym, PERIOD_M5, i);如果(C>O)返回(false)。}如果((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )&& CountHistTrades() > 0) return(true)。如果(CountHistTrades() ==0)返回(true)。return(false)。}//+------------------------------------------------------------------+bool SignalSell(string Sym){for (int i=1; i<=Wait; i++){double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架。double O = iOpen(Sym, PERIOD_M5, i);如果(C < O)返回(false)。}如果((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )&& CountHistTrades() > 0) return(true)。如果(CountHistTrades() ==0)返回(true)。return(false)。}//+------------------------------------------------------------------+datetime TimeLastHistOrder(int type = -1){datetime lasttime = 0;datetime opentime = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderCloseTime() > lasttime){lasttime = OrderCloseTime();opentime = OrderOpenTime()。}}}}return(opentime)。}//+------------------------------------------------------------------+int TypeLastHistOrder(){datetime time = 0;int type = -1;for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic){如果(OrderCloseTime() > time){time = OrderCloseTime()。type = OrderType()。}}}}return(type)。}//+------------------------------------------------------------------+double LotsLastHistOrder(int type = -1){datetime time = 0;double lots = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderOpenTime() > time){time = OrderOpenTime()。时间 = OrderLots()。}}}}return(lot)。}//+------------------------------------------------------------------+double PriceCloseLastHistOrder(int type = -1){datetime time = 0;双倍价格=0。for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(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--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderCloseTime() > time){time = OrderCloseTime()。price = OrderOpenPrice()。}}}}return(price)。} Any rookie question, so 问吧! 如何编码? A13ksandr 2016.09.13 02:53 #10942 alvlaf:外来的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++){如果(CountTrades() == 0) // 订单的数量必须为零{如果(((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) ) ||(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL) )&& MaxOpenOrders > OrdersTotal())// 如果最后一笔交易是亏损的,同样的交易将被打开,但手数更多。{类型=TypeLastHistOrder()。如果(Type == OP_BUY) Price =LastAsk;如果(类型==OP_SELL)价格=LastBid。Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)。}如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0&& MaxOpenOrders > OrdersTotal()// 如果最后一笔交易的利润等于零,则将开出相同的交易{类型=TypeLastHistOrder()。如果(Type == OP_BUY) Price =LastAsk;如果(类型==OP_SELL)价格=LastBid。Lot = NormalizeDouble(LotsLastHistOrder(), 2);ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)}如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL) )|| CountHistTrades() == 0)//如果最后一笔交易是盈利的,订单就会被打开。{如果(SignalBuy(Symbols[i])&& MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)}如果(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(),并输入iClose()/iOpen()而不是Close/Open),我没有检查代码的正确性。//+------------------------------------------------------------------+int CountTrades(int type = -1){int cnt = 0。for (int i=OrdersTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){如果(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--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))cnt++。}}return(cnt)。}//+------------------------------------------------------------------+bool SignalBuy(string Sym){for (int i=1; i<=Wait; i++){double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架。double O = iOpen(Sym, PERIOD_M5, i);如果(C>O)返回(false)。}如果((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )&& CountHistTrades() > 0) return(true)。如果(CountHistTrades() ==0)返回(true)。return(false)。}//+------------------------------------------------------------------+bool SignalSell(string Sym){for (int i=1; i<=Wait; i++){double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架。double O = iOpen(Sym, PERIOD_M5, i);如果(C < O)返回(false)。}如果((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )&& CountHistTrades() > 0) return(true)。如果(CountHistTrades() ==0)返回(true)。return(false)。}//+------------------------------------------------------------------+datetime TimeLastHistOrder(int type = -1){datetime lasttime = 0;datetime opentime = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderCloseTime() > lasttime){lasttime = OrderCloseTime();opentime = OrderOpenTime()。}}}}return(opentime)。}//+------------------------------------------------------------------+int TypeLastHistOrder(){datetime time = 0;int type = -1;for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic){如果(OrderCloseTime() > time){time = OrderCloseTime()。type = OrderType()。}}}}return(type)。}//+------------------------------------------------------------------+double LotsLastHistOrder(int type = -1){datetime time = 0;double lots = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderOpenTime() > time){time = OrderOpenTime()。时间 = OrderLots()。}}}}return(lot)。}//+------------------------------------------------------------------+double PriceCloseLastHistOrder(int type = -1){datetime time = 0;双倍价格=0。for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(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--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(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"#财产版本 "1.00"#属性严格外置双数Lots = 1; // Lotsextern int Exp = 1; // 过期时间外部int Wait = 2; // 一个方向的烛台数量Extern int Timeout = 1; // Time slot外置双倍数Multiplier = 3; // 倍增器外部int Slippage = 5; // Slippage外置 int Magic = 774274; // Magicextern int MaxOpenOrders = 1; // 最大订单数int ticket, Type, SymbolCount;双倍价格,地段。输入字符串 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(){如果(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])。符号[i] = StringTrimRight(Symbols[i]); //防止意外的空格。Symbols[i] = StringTrimLeft(Symbols[i]);}如果(SymbolCount > 0)返回(true)。return(false)。}//--------------------------------------------------空白的OnTick(){for (int i=0; i<SymbolCount; i++){如果(CountTrades() == 0) // 订单的数量必须为零{如果(((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) ) ||(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL) )&& MaxOpenOrders > OrdersTotal())// 如果最后一笔交易是亏损的,同样的交易将被打开,但手数更多。{类型=TypeLastHistOrder()。如果(Type == OP_BUY) Price = LastAsk;如果(类型==OP_SELL)价格=LastBid。Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)。}如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal()// 如果最后一笔交易的利润等于零,则将开出相同的交易{类型=TypeLastHistOrder()。如果(Type == OP_BUY) Price = LastAsk;如果(类型==OP_SELL)价格=LastBid。Lot = NormalizeDouble(LotsLastHistOrder(), 2);ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)}如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL) )|| CountHistTrades() == 0)//如果最后一笔交易是盈利的,订单就会被打开。{如果(SignalBuy(Symbols[i])&& MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)}如果(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--){如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){如果(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--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))cnt++。}}return(cnt)。}//+------------------------------------------------------------------+bool SignalBuy(string Sym){for (int i=1; i<=Wait; i++){double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架。double O = iOpen(Sym, PERIOD_M5, i);如果(C>O)返回(false)。}如果((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )&& CountHistTrades() > 0) return(true)。如果(CountHistTrades() ==0)返回(true)。return(false)。}//+------------------------------------------------------------------+bool SignalSell(string Sym){for (int i=1; i<=Wait; i++){double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架。double O = iOpen(Sym, PERIOD_M5, i);如果(C < O)返回(false)。}如果((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )&& CountHistTrades() > 0) return(true)。如果(CountHistTrades() ==0)返回(true)。return(false)。}//+------------------------------------------------------------------+datetime TimeLastHistOrder(int type = -1){datetime lasttime = 0;datetime opentime = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderCloseTime() > lasttime){lasttime = OrderCloseTime();opentime = OrderOpenTime()。}}}}return(opentime)。}//+------------------------------------------------------------------+int TypeLastHistOrder(){datetime time = 0;int type = -1;for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic){如果(OrderCloseTime() > time){time = OrderCloseTime()。type = OrderType()。}}}}return(type)。}//+------------------------------------------------------------------+double LotsLastHistOrder(int type = -1){datetime time = 0;double lots = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderOpenTime() > time){time = OrderOpenTime()。时间 = OrderLots()。}}}}return(lot)。}//+------------------------------------------------------------------+double PriceCloseLastHistOrder(int type = -1){datetime time = 0;双倍价格=0。for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(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--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderCloseTime() > time){time = OrderCloseTime()。price = OrderOpenPrice()。}}}}return(price)。} Any rookie question, so 问吧! 初学者的问题 MQL4 MT4 MetaTrader 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?帐户无效65帐户号码 不正确 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"#财产版本 "1.00"#属性严格外置双数Lots = 1; // Lotsextern int Exp = 1; // 过期时间外部int Wait = 2; // 一个方向的烛台数量Extern int Timeout = 1; // Time slot外置双倍数Multiplier = 3; // 倍增器外部int Slippage = 5; // Slippage外置 int Magic = 774274; // Magicextern int MaxOpenOrders = 1; // 最大订单数int ticket, Type, SymbolCount;双倍价格,地段。输入字符串 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(){如果(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])。符号[i] = StringTrimRight(Symbols[i]); //防止意外的空格。Symbols[i] = StringTrimLeft(Symbols[i]);}如果(SymbolCount > 0)返回(true)。return(false)。}//--------------------------------------------------空白的OnTick(){for (int i=0; i<SymbolCount; i++){double LastAsk = SymbolInfoDouble(Symbols[i], SYMBOL_ASK);double LastBid = SymbolInfoDouble(Symbols[i], SYMBOL_BID);如果(CountTrades() == 0) // 订单数量必须等于零{如果(((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) ) ||(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL) )&& MaxOpenOrders > OrdersTotal())// 如果最后一笔交易是亏损的,同样的交易将被打开,但手数更多。{类型=TypeLastHistOrder()。如果(Type == OP_BUY) Price = LastAsk;如果(类型==OP_SELL)价格=LastBid。Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)。}如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal()// 如果最后一笔交易的利润等于零,则将开出相同的交易{类型=TypeLastHistOrder()。如果(Type == OP_BUY) Price = LastAsk;如果(类型==OP_SELL)价格=LastBid。Lot = NormalizeDouble(LotsLastHistOrder(), 2);ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)}如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL) )|| CountHistTrades() == 0)//如果最后一笔交易是盈利的,订单就会被打开。{如果(SignalBuy(Symbols[i])&& MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)}如果(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--){如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){如果(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--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))cnt++。}}return(cnt)。}//+------------------------------------------------------------------+bool SignalBuy(string Sym){for (int i=1; i<=Wait; i++){double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架。double O = iOpen(Sym, PERIOD_M5, i);如果(C>O)返回(false)。}如果((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )&& CountHistTrades() > 0) return(true)。如果(CountHistTrades() ==0)返回(true)。return(false)。}//+------------------------------------------------------------------+bool SignalSell(string Sym){for (int i=1; i<=Wait; i++){double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架。double O = iOpen(Sym, PERIOD_M5, i);如果(C < O)返回(false)。}如果((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )&& CountHistTrades() > 0) return(true)。如果(CountHistTrades() ==0)返回(true)。return(false)。}//+------------------------------------------------------------------+datetime TimeLastHistOrder(int type = -1){datetime lasttime = 0;datetime opentime = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderCloseTime() > lasttime){lasttime = OrderCloseTime();opentime = OrderOpenTime()。}}}}return(opentime)。}//+------------------------------------------------------------------+int TypeLastHistOrder(){datetime time = 0;int type = -1;for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic){如果(OrderCloseTime() > time){time = OrderCloseTime()。type = OrderType()。}}}}return(type)。}//+------------------------------------------------------------------+double LotsLastHistOrder(int type = -1){datetime time = 0;double lots = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderOpenTime() > time){time = OrderOpenTime()。时间 = OrderLots()。}}}}return(lot)。}//+------------------------------------------------------------------+double PriceCloseLastHistOrder(int type = -1){datetime time = 0;双倍价格=0。for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(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--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderCloseTime() > time){time = OrderCloseTime()。price = OrderOpenPrice()。}}}}return(price)。} Any rookie question, so 问吧! 初学者的问题 MQL4 MT4 MetaTrader Nauris Zukas 2016.09.14 06:14 #10950 你好!如何确定一个头寸是否 在TP上关闭?我认为OrderClosePrice()==OrderTakeProfit()的使用 是不正确的。 1...108810891090109110921093109410951096109710981099110011011102...1178 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这段代码是用MQL5写的吗?
for (int i=0; i<SymbolCount; i++)
{
如果(CountTrades() == 0) // 订单的数量必须为零
{
如果(((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) ) ||
(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL) )&& MaxOpenOrders > OrdersTotal())
// 如果最后一笔交易是亏损的,同样的交易将被打开,但手数更多。
{
类型=TypeLastHistOrder()。
如果(Type == OP_BUY) Price =LastAsk;
如果(类型==OP_SELL)价格=LastBid。
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)。
}
如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0&& MaxOpenOrders > OrdersTotal()
// 如果最后一笔交易的利润 等于零,则将开出相同的交易
{
类型=TypeLastHistOrder()。
如果(Type == OP_BUY) Price =LastAsk;
如果(类型==OP_SELL)价格=LastBid。
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL) )
|| CountHistTrades() == 0)//如果最后一笔交易是盈利的,订单就会被打开。
{
如果(SignalBuy(Symbols[i])&& MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
如果(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(),并输入iClose()/iOpen()而不是Close/Open),我没有检查代码的正确性。
//+------------------------------------------------------------------+
int CountTrades(int type = -1)
{
int cnt = 0。
for (int i=OrdersTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
如果(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--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++。
}
}
return(cnt)。
}
//+------------------------------------------------------------------+
bool SignalBuy(string Sym)
{
for (int i=1; i<=Wait; i++)
{
double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架。
double O = iOpen(Sym, PERIOD_M5, i);
如果(C>O)返回(false)。
}
如果((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )
&& CountHistTrades() > 0) return(true)。
如果(CountHistTrades() ==0)返回(true)。
return(false)。
}
//+------------------------------------------------------------------+
bool SignalSell(string Sym)
{
for (int i=1; i<=Wait; i++)
{
double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架。
double O = iOpen(Sym, PERIOD_M5, i);
如果(C < O)返回(false)。
}
如果((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )
&& CountHistTrades() > 0) return(true)。
如果(CountHistTrades() ==0)返回(true)。
return(false)。
}
//+------------------------------------------------------------------+
datetime TimeLastHistOrder(int type = -1)
{
datetime lasttime = 0;
datetime opentime = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(OrderCloseTime() > lasttime)
{
lasttime = OrderCloseTime();
opentime = OrderOpenTime()。
}
}
}
}
return(opentime)。
}
//+------------------------------------------------------------------+
int TypeLastHistOrder()
{
datetime time = 0;
int type = -1;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderMagicNumber() == Magic)
{
如果(OrderCloseTime() > time)
{
time = OrderCloseTime()。
type = OrderType()。
}
}
}
}
return(type)。
}
//+------------------------------------------------------------------+
double LotsLastHistOrder(int type = -1)
{
datetime time = 0;
double lots = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(OrderOpenTime() > time)
{
time = OrderOpenTime()。
时间 = OrderLots()。
}
}
}
}
return(lot)。
}
//+------------------------------------------------------------------+
double PriceCloseLastHistOrder(int type = -1)
{
datetime time = 0;
双倍价格=0。
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(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--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(OrderCloseTime() > time)
{
time = OrderCloseTime()。
price = OrderOpenPrice()。
}
}
}
}
return(price)。
}
外来的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++)
{
如果(CountTrades() == 0) // 订单的数量必须为零
{
如果(((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) ) ||
(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL) )&& MaxOpenOrders > OrdersTotal())
// 如果最后一笔交易是亏损的,同样的交易将被打开,但手数更多。
{
类型=TypeLastHistOrder()。
如果(Type == OP_BUY) Price =LastAsk;
如果(类型==OP_SELL)价格=LastBid。
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)。
}
如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0&& MaxOpenOrders > OrdersTotal()
// 如果最后一笔交易的利润等于零,则将开出相同的交易
{
类型=TypeLastHistOrder()。
如果(Type == OP_BUY) Price =LastAsk;
如果(类型==OP_SELL)价格=LastBid。
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL) )
|| CountHistTrades() == 0)//如果最后一笔交易是盈利的,订单就会被打开。
{
如果(SignalBuy(Symbols[i])&& MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
如果(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(),并输入iClose()/iOpen()而不是Close/Open),我没有检查代码的正确性。
//+------------------------------------------------------------------+
int CountTrades(int type = -1)
{
int cnt = 0。
for (int i=OrdersTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
如果(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--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++。
}
}
return(cnt)。
}
//+------------------------------------------------------------------+
bool SignalBuy(string Sym)
{
for (int i=1; i<=Wait; i++)
{
double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架。
double O = iOpen(Sym, PERIOD_M5, i);
如果(C>O)返回(false)。
}
如果((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )
&& CountHistTrades() > 0) return(true)。
如果(CountHistTrades() ==0)返回(true)。
return(false)。
}
//+------------------------------------------------------------------+
bool SignalSell(string Sym)
{
for (int i=1; i<=Wait; i++)
{
double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架。
double O = iOpen(Sym, PERIOD_M5, i);
如果(C < O)返回(false)。
}
如果((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )
&& CountHistTrades() > 0) return(true)。
如果(CountHistTrades() ==0)返回(true)。
return(false)。
}
//+------------------------------------------------------------------+
datetime TimeLastHistOrder(int type = -1)
{
datetime lasttime = 0;
datetime opentime = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(OrderCloseTime() > lasttime)
{
lasttime = OrderCloseTime();
opentime = OrderOpenTime()。
}
}
}
}
return(opentime)。
}
//+------------------------------------------------------------------+
int TypeLastHistOrder()
{
datetime time = 0;
int type = -1;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderMagicNumber() == Magic)
{
如果(OrderCloseTime() > time)
{
time = OrderCloseTime()。
type = OrderType()。
}
}
}
}
return(type)。
}
//+------------------------------------------------------------------+
double LotsLastHistOrder(int type = -1)
{
datetime time = 0;
double lots = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(OrderOpenTime() > time)
{
time = OrderOpenTime()。
时间 = OrderLots()。
}
}
}
}
return(lot)。
}
//+------------------------------------------------------------------+
double PriceCloseLastHistOrder(int type = -1)
{
datetime time = 0;
双倍价格=0。
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(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--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(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"
#财产版本 "1.00"
#属性严格
外置双数Lots = 1; // Lots
extern int Exp = 1; // 过期时间
外部int Wait = 2; // 一个方向的烛台数量
Extern int Timeout = 1; // Time slot
外置双倍数Multiplier = 3; // 倍增器
外部int Slippage = 5; // Slippage
外置 int Magic = 774274; // Magic
extern int MaxOpenOrders = 1; // 最大订单数
int ticket, Type, SymbolCount;
双倍价格,地段。
输入字符串 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()
{
如果(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])。
符号[i] = StringTrimRight(Symbols[i]); //防止意外的空格。
Symbols[i] = StringTrimLeft(Symbols[i]);
}
如果(SymbolCount > 0)返回(true)。
return(false)。
}
//--------------------------------------------------
空白的OnTick()
{
for (int i=0; i<SymbolCount; i++)
{
double LastAsk = SymbolInfoDouble(Symbols[i], SYMBOL_ASK);
double LastBid = SymbolInfoDouble(Symbols[i], SYMBOL_BID);
如果(CountTrades() == 0) // 订单数量必须等于零
{
如果(((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) ) ||
(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL) )&& MaxOpenOrders > OrdersTotal())
// 如果最后一笔交易是亏损的,同样的交易将被打开,但手数更多。
{
类型=TypeLastHistOrder()。
如果(Type == OP_BUY) Price = LastAsk;
如果(类型==OP_SELL)价格=LastBid。
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)。
}
如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal()
// 如果最后一笔交易的利润等于零,则将开出相同的交易
{
类型=TypeLastHistOrder()。
如果(Type == OP_BUY) Price = LastAsk;
如果(类型==OP_SELL)价格=LastBid。
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL) )
|| CountHistTrades() == 0)//如果最后一笔交易是盈利的,订单就会被打开。
{
如果(SignalBuy(Symbols[i])&& MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)
}
如果(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--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
如果(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--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++。
}
}
return(cnt)。
}
//+------------------------------------------------------------------+
bool SignalBuy(string Sym)
{
for (int i=1; i<=Wait; i++)
{
double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架。
double O = iOpen(Sym, PERIOD_M5, i);
如果(C>O)返回(false)。
}
如果((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )
&& CountHistTrades() > 0) return(true)。
如果(CountHistTrades() ==0)返回(true)。
return(false)。
}
//+------------------------------------------------------------------+
bool SignalSell(string Sym)
{
for (int i=1; i<=Wait; i++)
{
double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架。
double O = iOpen(Sym, PERIOD_M5, i);
如果(C < O)返回(false)。
}
如果((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )
&& CountHistTrades() > 0) return(true)。
如果(CountHistTrades() ==0)返回(true)。
return(false)。
}
//+------------------------------------------------------------------+
datetime TimeLastHistOrder(int type = -1)
{
datetime lasttime = 0;
datetime opentime = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(OrderCloseTime() > lasttime)
{
lasttime = OrderCloseTime();
opentime = OrderOpenTime()。
}
}
}
}
return(opentime)。
}
//+------------------------------------------------------------------+
int TypeLastHistOrder()
{
datetime time = 0;
int type = -1;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderMagicNumber() == Magic)
{
如果(OrderCloseTime() > time)
{
time = OrderCloseTime()。
type = OrderType()。
}
}
}
}
return(type)。
}
//+------------------------------------------------------------------+
double LotsLastHistOrder(int type = -1)
{
datetime time = 0;
double lots = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(OrderOpenTime() > time)
{
time = OrderOpenTime()。
时间 = OrderLots()。
}
}
}
}
return(lot)。
}
//+------------------------------------------------------------------+
double PriceCloseLastHistOrder(int type = -1)
{
datetime time = 0;
双倍价格=0。
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(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--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(OrderCloseTime() > time)
{
time = OrderCloseTime()。
price = OrderOpenPrice()。
}
}
}
}
return(price)。
}
你好!
如何确定一个头寸是否 在TP上关闭?我认为OrderClosePrice()==OrderTakeProfit()的使用 是不正确的。