任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1096 1...108910901091109210931094109510961097109810991100110111021103...1178 新评论 Alexey Viktorov 2016.09.14 10:12 #10951 abeiks:你好! 如何确定一个头寸是否在TP上被关闭?我认为OrderClosePrice()==OrderTakeProfit()的使用 是不正确的。在订单注释中寻找[tp],如果有... Nauris Zukas 2016.09.14 10:46 #10952 AlexeyVik:在顺序评论中寻找[tp],如果有的话... 谢谢你。 [删除] 2016.09.14 14:12 #10953 你好,Profi。帮助修复指标中的错误.....指示器正在工作。该信号在第0条上被触发。但是,当在当前条形图上收到其他刻度时,它会再次触发并给出新的信号。我需要它在卖出或买入事件发生时,把这个信号放在当前事件价格的位置上的一个圆圈里,并且在这个开放的酒吧里没有其他事件被处理。我想避免在这个酒吧出现新的信号和圆圈。________________________我明白你会说这是无稽之谈,是虚假信号,等等,但这正是我所需要的。我知道我应该创建一个旗帜,一个标记,等等 - 但我没有时间自己研究语言。_________________________如果你能在所附文件中添加这样的标志,并在添加的行中 标注颜色.....,我将非常感激。谢谢你,我希望有人会回应 附加的文件: messages1409.mq4 5 kb Aleksandr Afanasenko 2016.09.14 15:03 #10954 alvlaf:犯了几个错误,不能正确对待。这里有什么问题吗?//+------------------------------------------------------------------+//| 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)。} 除了打开两个不同的符号外,它还设法为一个相同的符号同时打开几个位置。在某个地方,你和我都有点过火了。 [删除] 2016.09.14 20:38 #10955 请帮助我根据新闻进行交易。我需要一个有两个主要功能的EA。 第一个功能:在给定的时间,在给定的价格水平,用给定的TP和SL下挂单。 第二个功能:保持挂单与价格平行。这意味着将它们与价格一起移动(手动操作太麻烦了)。在特定的时间,在新闻发布的时刻,我们必须停止这一行动,并等到价格触及其中一个订单。此后,第二份订单立即被删除。 再一次。 在新闻发布前2分钟,在距离价格10个点的地方放上两个相反的止损单,立即启动与价格平行移动的功能,2分钟内与价格一起移动,一个订单远离价格,第二个追上价格。在新闻发布时,你应该禁用挂单移动的功能,然后等待其中一个订单的崩溃。第二个订单在第一个订单崩溃后立即被删除。 在EA的属性中改变的可变变量(大约是我想象的那样,我不知道现实中的实现情况)。 TP - 600(默认)。Trall - 300 (默认)SL - 100(默认)。点数 - 100(默认情况下与价格的距离)。滑点 - 100(滑点默认为点)。地段 - 0.1风险 - 10 //百分比(好吧,这不是必要的,如果有必要,我以后会问的)。TimeNews1On - true(使用下面的单元格输入时间,false - 顾问不进行交易。)TimeNewsHour - 小时(新闻发布时间1)。TimeNewsMin - 分钟(新闻发布时间1)。TimeNews2On - false(默认)。TimeNewsHour - 小时(新闻发布时间2)TimeNewsMin - 分钟(新闻发布时间2)。时间新闻3月1日 - 假的TimeNewsHour - 小时(新闻发布时间3)TimeNewsMin - 分钟(新闻发布时间3)。时代新闻网 - 假的TimeNewsHour - 小时(新闻发布时间4)TimeNewsMin - 分钟(新闻发布时间4)。时间新闻5On - falseTimeNewsHour - 小时(新闻发布时间5)TimeNewsMin - 分钟(新闻发布时间5)。 Insta,五位数。我正在手动做这一切,这太麻烦了,现在我没有时间去琢磨新闻,我想在早上或晚上把专家顾问放在当天会有新闻的货币对上,这样他们都会有结果。-------------------------------------- 如果你知道这样的专家,请分享。 提前感谢您! 我将免费撰写一份顾问报告 A13ksandr 2016.09.15 04:22 #10956 alvlaf:让我们回到你的源代码。像这样试试吧。int OnInit(){if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1); return(INIT_SUCCEED)。}空白的OnDeInit()。{GlobalVariableSet("AllowNewOrders",1)。}空白的OnTick(){如果(CountTrades() == 0) // 订单的数量必须为零{如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) )|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))// 如果最后一笔交易是亏损的,则开出相同的交易,但手数更大。{GlobalVariableSet("AllowNewOrders", 0)。类型=TypeLastHistOrder()。如果(Type == OP_BUY) Price = Ask;如果(类型== OP_SELL)价格=Bid。Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);}如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)。// 如果上一次交易的利润 等于零,则将开出相同的交易。{GlobalVariableSet("AllowNewOrders", 0)。类型=TypeLastHistOrder()。如果(Type == OP_BUY) Price = Ask;如果(类型== OP_SELL)价格=Bid。Lot = NormalizeDouble(LotsLastHistOrder(), 2);ticket = OrderSend(Symbol(), 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)//如果最后一笔交易是盈利的,订单就会被打开。{如果(GlobalVariableGet("AllowNewOrders")>0)返回。如果(SignalBuy() && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbol(, OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)。如果(ticket>0)GlobalVariableSet("AllowNewOrders", 0)。}如果(SignalSell() && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbol(, OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)。如果(ticket>0)GlobalVariableSet("AllowNewOrders", 0)。}}}}我没有检查过,因为我不明白一个总限价为1个订单的EA的多个副本如何决定在哪个符号上(在一个盈利系列之后)开始交易比较好? Any rookie question, so 错误、漏洞、问题 如何编码? A13ksandr 2016.09.15 04:49 #10957 BooGUY:请帮助根据消息进行交易。真的需要一个EA,它应该有两个主要功能。 第一个功能:在给定的时间,在距离价格给定的水平,用给定的TP和SL下挂单。 第二个功能:保持挂单与价格平行。这意味着将它们与价格一起移动(手动操作太麻烦了)。在特定的时间,在新闻发布的时刻,我们必须停止这一行动,并等到价格触及其中一个订单。此后,第二份订单立即被删除。 再一次。 在新闻发布前2分钟,在距离价格10个点的地方放上两个相反的止损单,立即启动与价格平行移动的功能,2分钟内与价格一起移动,一个订单远离价格,第二个追上价格。在新闻发布时,你应该禁用挂单移动的功能,然后等待其中一个订单的崩溃。第二个将在第一个崩溃后立即被删除。如果你知道或遇到过这样的顾问,请分享一下 提前感谢您!我可以把从文件中读取新闻的代码发给你,它可能会派上用场。每周一次,你看经济日历并把你应该注意的新闻的数据输入文件夹_with_terminal\MQL4\Files\novosti.txt,顾问甚至可以在新闻之前激活(你可以用这个顾问来跟踪美国会议的开始,例如--在有强烈运动的情况下)。我还没有完成交易代码,因为我被新闻严重 "欺骗 "了几次:))最新版本在不同的距离放置了6个订单(3个买入止损点+3个卖出止损点),有不同的止盈。总之,我的新闻代码可以使用,但我必须改进我的交易代码。#属性严格输入字符串 NewsFilename = "novosti.txt"; // 包含新闻的文本文件的名称。输入 int MinutesBefore = 5; // 应该在新闻发布前多少分钟下单。输入 int MinutesAfter1 = 15; // 新闻发布后多少分钟,删除第一组的订单输入 int MinutesAfter2 = 30; // 在新闻发布后多少分钟删除第二组订单输入 int MinutesAfter3 = 30; // 新闻发布后多少分钟内删除第3组订单输入 int PriceIndent1 = 15; // 从价格中缩进的点数输入 int PriceIndent2 = 5; // 从上一个TakeProfit开始往后退,单位是点。输入 int TakeProfit1 = 40; // 第一组的TakeProfit大小,单位为点。输入 int TakeProfit2 = 60; // 第二组的TakeProfit大小,单位为点。输入 int TakeProfit3 = 100; // 第三组的TakeProfit大小,单位为点。输入 int StopLoss = 20; // 所有订单的StopLoss大小,单位为点。输入双倍数Multiplier1 = 1.0; // 对第二组的订单批次的系数输入双倍数Multiplier2 = 2.0; // 对第三组的订单手数的系数。输入 int MaximalRisk = 10; // 最大的风险,以百分数表示。//====================================================================================================datetime Times[200]; // LastTime;string Symbols[200];bool NewsPassed[200]。int NewsCount。//====================================================================================================int OnInit(){// 加载新鲜的新闻if (!LoadNews()) return(INIT_FAILED);return(INIT_SUCCEEDED)。}//====================================================================================================空白的OnTick(){if (!IsTradeAllowed()) return;datetime TestTime = iTime(Symbol(), PERIOD_H1, 0)。// 在每天开始时更新新闻如果(TimeDay(TestTime) != TimeDay(LastTime)){LastTime = TestTime。if (!LoadNews()){Alert("更新新闻错误!")。返回。}}//-------------------------------------------------------------------------------------------------for (int i = 0; i < NewsCount; i++){// Till新闻发布把订单作为突破口如果(Times[i] > TimeCurrent() && Times[i] - TimeCurrent() <= MinutesBefore * 60 && !NewsPassed[i]){PrintFormat("当前时间是%s,是时候设置货币订单了 - %s", TimeToStr(TimeCurrent(), TIME_DATE|TIME_MINUTES), Symbols[i])。SetupOrders(Symbols[i];NewsPassed[i] = true。}}//-------------------------------------------------------------------------------------------------}//====================================================================================================bool LoadNews(){int Count, Tick = 0;string Str, Data[40];ResetLastError()。如果(!FileIsExist(NewsFilename, 0)){PrintFormat("The news file %s does not exist.", NewsFilename)。Print("该文件必须在文件夹\\MQL4\Files中,在测试的情况下-在文件夹\Tester\Files中。")。return(false)。}int Handle = FileOpen(NewsFilename, FILE_READ|FILE_SHARE_READ|FILE_TXT) 。如果(Handle != INVALID_HANDLE){while (!FileIsEnding(Handle)){Str = FileReadString(Handle)。Count = StringSplit(Str, StringGetChar(" ", 0), Data);for (int i = 1; i < Count; i = i + 2){Times[Tick] = StringToTime(Data[0] + " + Data[i])。符号[Tick] = 数据[i + 1]。Tick++;}}FileClose(Handle)。NewsCount = Tick;for (int i = 0; i < NewsCount; i++){如果(Times[i] > TimeCurrent())NewsPassed[i] = false。否则NewsPassed[i] = false。}PrintFormat("Number of news uploaded - %i.", NewsCount);return(true)。}PrintFormat("Can't open file %s.错误代码%d。", NewsFilename, GetLastError())。return(false)。}//====================================================================================================空白的SetupOrders(string Sym)。{int Ticket, Dig, Count;双重价格,TP,SL,地段。datetime KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter1) * 60;string SymList[7];//-------------------------------------------------------------------------------------------------如果(Sym == "AUD"){SymList[0] = "AUDCAD"; SymList[1] = "AUDCHF"; SymList[2] = "AUDJPY"; SymList[3] = "AUDNZD";SymList[4] = "AUDUSD"; SymList[5] = "EURAUD"; SymList[6] = "GBPAUD"。}//-------------------------------------------------------------------------------------------------如果(Sym == "CAD"){SymList[0] = "AUDCAD"; SymList[1] = "CADCHF"; SymList[2] = "CADJPY"; SymList[3] = "EURCAD";SymList[4] = "GBPCAD"; SymList[5] = "NZDCAD"; SymList[6] = "USDCAD";}//-------------------------------------------------------------------------------------------------如果(Sym == "CHF"){SymList[0] = "AUDCHF"; SymList[1] = "CADCHF"; SymList[2] = "EURCHF"; SymList[3] = "GBPCHF"。SymList[4] = "CHFJPY"; SymList[5] = "NZDCHF"; SymList[6] = "USDCHF"。}//-------------------------------------------------------------------------------------------------如果(Sym == "EUR"){SymList[0] = "EURAUD"; SymList[1] = "EURCAD"; SymList[2] = "EURCHF"; SymList[3] = "EURGBP"。SymList[4] = "EURJPY"; SymList[5] = "EURNZD"; SymList[6] = "EURUSD"。}//-------------------------------------------------------------------------------------------------如果(Sym == "GBP"){SymList[0] = "EURGBP"; SymList[1] = "GBPAUD"; SymList[2] = "GBPCAD"; SymList[3] = "GBPCHF"。SymList[4] = "GBPJPY"; SymList[5] = "GBPNZD"; SymList[6] = "GBPUSD"。}//-------------------------------------------------------------------------------------------------如果(Sym == "JPY"){SymList[0] = "AUDJPY"; SymList[1] = "CADJPY"; SymList[2] = "CHFJPY"; SymList[3] = "EURJPY"。SymList[4] = "GBPJPY"; SymList[5] = "NZDJPY"; SymList[6] = "USDJPY"。}//-------------------------------------------------------------------------------------------------如果(Sym == "NZD"){SymList[0] = "AUDNZD"; SymList[1] = "EURNZD"; SymList[2] = "GBPNZD"; SymList[3] = "NZDCAD";SymList[4] = "NZDCHF"; SymList[5] = "NZDJPY"; SymList[6] = "NZDUSD";}//-------------------------------------------------------------------------------------------------如果(Sym == "USD"){SymList[0] = "AUSUSD"; SymList[1] = "EURUSD"; SymList[2] = "GBPUSD"; SymList[3] = "NZDUSD"。SymList[4] = "USDCAD"; SymList[5] = "USDCHF"; SymList[6] = "USDJPY"。}//-------------------------------------------------------------------------------------------------for (int i = 0; i < 7; i++){计数=0。Dig = int(MarketInfo(SymList[i], MODE_DIGITS))。Lot = NormalizeDouble(0.01, 2);//购买KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter1) * 60;Price = NormalizeDouble(MarketInfo(SymList[i], MODE_ASK) + PriceIndent1 / pow(10, Dig-1), Dig);TP = NormalizeDouble(Price + TakeProfit1 / pow(10, Dig-1), Dig)。SL = NormalizeDouble(Price - StopLoss / pow(10, Dig-1), Dig);Ticket = OrderSend(SymList[i], OP_BUYSTOP, Lot, Price, 5, SL, TP, NULL, 0, KeepAlive, clrLimeGreen)。if (Ticket > 0) Count++; else PrintFormat("Error creating order %i, symbol %s, price %f, Take %f, Stop %f, Lot %f.", GetLastError(), SymList[i], Price, TP, SL, Lot)。KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter2) * 60;价格=NormalizeDouble(TP + PriceIndent2 / pow(10, Dig-1), Dig)。TP = NormalizeDouble(Price + TakeProfit2 / pow(10, Dig-1), Dig)。SL = NormalizeDouble(Price - StopLoss / pow(10, Dig-1), Dig);Ticket = OrderSend(SymList[i], OP_BUYSTOP, Lot * Multiplier1, Price, 5, SL, TP, NULL, 0, KeepAlive, clrLimeGreen)。if (Ticket > 0) Count++; else PrintFormat("Error creating order %i, symbol %s, price %f, Take %f, Stop %f, Lot %f.", GetLastError(), SymList[i], Price, TP, SL, Lot*Multiplier1)KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter3) * 60;价格=NormalizeDouble(TP + PriceIndent2 / pow(10, Dig-1), Dig)。TP = NormalizeDouble(Price + TakeProfit2 / pow(10, Dig-1), Dig)。SL = NormalizeDouble(Price - StopLoss / pow(10, Dig-1), Dig);Ticket = OrderSend(SymList[i], OP_BUYSTOP, Lot*Multiplier2, Price, 5, SL, TP, NULL, 0, KeepAlive, clrLimeGreen)。if (Ticket > 0) Count++; else PrintFormat("Error creating order %i, symbol %s, price %f, take %f, stop %f, lot %f.", GetLastError(), SymList[i], Price, TP, SL, Lot*Multiplier2)// 销售KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter1) * 60;Price = NormalizeDouble(MarketInfo(SymList[i], MODE_BID) - PriceIndent1 / pow(10, Dig-1), Dig);TP = NormalizeDouble(Price - TakeProfit1 / pow(10, Dig-1), Dig)。SL = NormalizeDouble(Price + StopLoss / pow(10, Dig-1), Dig);Ticket = OrderSend(SymList[i], OP_SELLSTOP, Lot, Price, 5, SL, TP, NULL, 0, KeepAlive, clrOrangeRed)。if (Ticket > 0) Count++; else PrintFormat("Error creating order %i, symbol %s, price %f, Take %f, Stop %f, Lot %f.", GetLastError(), SymList[i], Price, TP, SL, Lot)。KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter2) * 60;价格=NormalizeDouble(TP - PriceIndent2 / pow(10, Dig-1), Dig)。TP = NormalizeDouble(Price - TakeProfit2 / pow(10, Dig-1), Dig)。SL = NormalizeDouble(Price + StopLoss / pow(10, Dig-1), Dig);Ticket = OrderSend(SymList[i], OP_SELLSTOP, Lot, Price, 5, SL, TP, NULL, 0, KeepAlive, clrOrangeRed)。if (Ticket > 0) Count++; else PrintFormat("Error creating order %i, symbol %s, price %f, Take %f, Stop %f, Lot %f.", GetLastError(), SymList[i], Price, TP, SL, Lot*Multiplier1)KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter3) * 60;价格=NormalizeDouble(TP - PriceIndent2 / pow(10, Dig-1), Dig)。TP = NormalizeDouble(Price - TakeProfit3 / pow(10, Dig-1), Dig)。SL = NormalizeDouble(Price + StopLoss / pow(10, Dig-1), Dig);Ticket = OrderSend(SymList[i], OP_SELLSTOP, Lot, Price, 5, SL, TP, NULL, 0, KeepAlive, clrOrangeRed)。PrintFormat("有%i个由符号%s下的订单", SymList[i], Count);0 }}新闻文件看起来像这样。15.09.2016 01:45 NZD 04:30 AUD 10:30 CHF 14:00 GBP 15:30 USD16.09.2016 15:30 USD 17:00 USD等等... Any rookie question, so [警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 FIR filters Aleksandr Afanasenko 2016.09.15 07:49 #10958 A13ksandr:让我们回到你的源代码。像这样试试吧。int OnInit(){if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1); return(INIT_SUCCEED)。}空白的OnDeInit()。{GlobalVariableSet("AllowNewOrders",1)。}空白的OnTick(){如果(CountTrades() == 0) // 订单的数量必须为零{如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) )|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))// 如果最后一笔交易是亏损的,则开出相同的交易,但手数更大。{GlobalVariableSet("AllowNewOrders", 0)。类型=TypeLastHistOrder()。如果(Type == OP_BUY) Price = Ask;如果(类型== OP_SELL)价格=Bid。Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);}如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)。// 如果上一次交易的利润等于零,则将开出相同的交易。{GlobalVariableSet("AllowNewOrders", 0)。类型=TypeLastHistOrder()。如果(Type == OP_BUY) Price = Ask;如果(类型== OP_SELL)价格=Bid。Lot = NormalizeDouble(LotsLastHistOrder(), 2);ticket = OrderSend(Symbol(), 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)//如果最后一笔交易是盈利的,订单就会被打开。{如果(GlobalVariableGet("AllowNewOrders")>0)返回。如果(SignalBuy() && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbol(, OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)。如果(ticket>0)GlobalVariableSet("AllowNewOrders", 0)。}如果(SignalSell() && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbol(, OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)。如果(ticket>0)GlobalVariableSet("AllowNewOrders", 0)。}}}}我没有检查过,因为我不明白一个总限价为1个订单的EA的几个副本如何检测哪个符号(在一个盈利系列之后)开始交易比较好?亚历山大,机器人必须等待每个符号在一个方向上的指定数量的蜡烛,然后开始一个系列,也就是说,在哪个符号这个条件首先被触发,为该符号打开第一笔交易。同时,你应该禁止为其他符号打开一个系列,直到第一个系列完成盈利。你给出的最后一个代码是一个进步--它根本没有打开任何交易(即,禁令是有效的)。我完全不明白为什么没有。所附的是日志的截图。 Nauris Zukas 2016.09.15 07:54 #10959 也许现在是时候学习如何插入代码 了!int OnInit() { if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1); return(INIT_SUCCEEDED); } void OnDeInit() { GlobalVariableSet("AllowNewOrders",1); } void OnTick() { if (CountTrades() == 0) // Количество ордеров должно равняться нулю { if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))) // Если последняя сделка убыточная, то открывается такая же, но с увеличенным лотом { GlobalVariableSet("AllowNewOrders", 0); Type = TypeLastHistOrder(); if (Type == OP_BUY) Price = Ask; if (Type == OP_SELL) Price = Bid; Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2); ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic); } if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0) // Если прибыль последней сделки равняется нулю, то открывается такая же { GlobalVariableSet("AllowNewOrders", 0); Type = TypeLastHistOrder(); if (Type == OP_BUY) Price = Ask; if (Type == OP_SELL) Price = Bid; Lot = NormalizeDouble(LotsLastHistOrder(), 2); ticket = OrderSend(Symbol(), 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 (GlobalVariableGet("AllowNewOrders") > 0) return; if (SignalBuy() && MaxOpenOrders > OrdersTotal()) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic); if (ticket>0) GlobalVariableSet("AllowNewOrders", 0); } if (SignalSell() && MaxOpenOrders > OrdersTotal()) { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic); if (ticket>0) GlobalVariableSet("AllowNewOrders", 0); } } } } [删除] 2016.09.15 09:57 #10960 abeiks: 也许现在是时候学习如何插入代码了!int OnInit() // ИХМО так нагляднее { if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1); return(INIT_SUCCEEDED); } void OnDeInit() { GlobalVariableSet("AllowNewOrders",1); } void OnTick() { if (CountTrades() == 0) // Количество ордеров должно равняться нулю { if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))) // Если последняя сделка убыточная, то открывается такая же, но с увеличенным лотом { GlobalVariableSet("AllowNewOrders", 0); Type = TypeLastHistOrder(); if (Type == OP_BUY) Price = Ask; if (Type == OP_SELL) Price = Bid; Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2); ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic); } if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0) // Если прибыль последней сделки равняется нулю, то открывается такая же { GlobalVariableSet("AllowNewOrders", 0); Type = TypeLastHistOrder(); if (Type == OP_BUY) Price = Ask; if (Type == OP_SELL) Price = Bid; Lot = NormalizeDouble(LotsLastHistOrder(), 2); ticket = OrderSend(Symbol(), 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 (GlobalVariableGet("AllowNewOrders") > 0) return; if (SignalBuy() && MaxOpenOrders > OrdersTotal()) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic); if (ticket>0) GlobalVariableSet("AllowNewOrders", 0); } if (SignalSell() && MaxOpenOrders > OrdersTotal()) { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic); if (ticket>0) GlobalVariableSet("AllowNewOrders", 0); } } } } 1...108910901091109210931094109510961097109810991100110111021103...1178 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你好!
如何确定一个头寸是否在TP上被关闭?我认为OrderClosePrice()==OrderTakeProfit()的使用 是不正确的。
在订单注释中寻找[tp],如果有...
在顺序评论中寻找[tp],如果有的话...
你好,Profi。
帮助修复指标中的错误.....
指示器正在工作。
该信号在第0条上被触发。
但是,当在当前条形图上收到其他刻度时,它会再次触发并给出新的信号。
我需要它在卖出或买入事件发生时,把这个信号放在当前事件价格的位置上的一个圆圈里,并且在这个开放的酒吧里没有其他事件被处理。
我想避免在这个酒吧出现新的信号和圆圈。
________________________
我明白你会说这是无稽之谈,是虚假信号,等等,但这正是我所需要的。
我知道我应该创建一个旗帜,一个标记,等等 - 但我没有时间自己研究语言。
_________________________
如果你能在所附文件中添加这样的标志,并在添加的行中 标注颜色.....,我将非常感激。
谢谢你,我希望有人会回应
犯了几个错误,不能正确对待。这里有什么问题吗?
//+------------------------------------------------------------------+请帮助我根据新闻进行交易。我需要一个有两个主要功能的EA。
第一个功能:在给定的时间,在给定的价格水平,用给定的TP和SL下挂单。
第二个功能:保持挂单与价格平行。这意味着将它们与价格一起移动(手动操作太麻烦了)。在特定的时间,在新闻发布的时刻,我们必须停止这一行动,并等到价格触及其中一个订单。此后,第二份订单立即被删除。
再一次。
在新闻发布前2分钟,在距离价格10个点的地方放上两个相反的止损单,立即启动与价格平行移动的功能,2分钟内与价格一起移动,一个订单远离价格,第二个追上价格。在新闻发布时,你应该禁用挂单移动的功能,然后等待其中一个订单的崩溃。第二个订单在第一个订单崩溃后立即被删除。
在EA的属性中改变的可变变量(大约是我想象的那样,我不知道现实中的实现情况)。
TP - 600(默认)。
Trall - 300 (默认)
SL - 100(默认)。
点数 - 100(默认情况下与价格的距离)。
滑点 - 100(滑点默认为点)。
地段 - 0.1
风险 - 10 //百分比(好吧,这不是必要的,如果有必要,我以后会问的)。
TimeNews1On - true(使用下面的单元格输入时间,false - 顾问不进行交易。)
TimeNewsHour - 小时(新闻发布时间1)。
TimeNewsMin - 分钟(新闻发布时间1)。
TimeNews2On - false(默认)。
TimeNewsHour - 小时(新闻发布时间2)
TimeNewsMin - 分钟(新闻发布时间2)。
时间新闻3月1日 - 假的
TimeNewsHour - 小时(新闻发布时间3)
TimeNewsMin - 分钟(新闻发布时间3)。
时代新闻网 - 假的
TimeNewsHour - 小时(新闻发布时间4)
TimeNewsMin - 分钟(新闻发布时间4)。
时间新闻5On - false
TimeNewsHour - 小时(新闻发布时间5)
TimeNewsMin - 分钟(新闻发布时间5)。
Insta,五位数。
我正在手动做这一切,这太麻烦了,现在我没有时间去琢磨新闻,我想在早上或晚上把专家顾问放在当天会有新闻的货币对上,这样他们都会有结果。
--------------------------------------
如果你知道这样的专家,请分享。
提前感谢您!
让我们回到你的源代码。像这样试试吧。
int OnInit()
{
if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1);
return(INIT_SUCCEED)。
}
空白的OnDeInit()。
{
GlobalVariableSet("AllowNewOrders",1)。
}
空白的OnTick()
{
如果(CountTrades() == 0) // 订单的数量必须为零
{
如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) )
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))
// 如果最后一笔交易是亏损的,则开出相同的交易,但手数更大。
{
GlobalVariableSet("AllowNewOrders", 0)。
类型=TypeLastHistOrder()。
如果(Type == OP_BUY) Price = Ask;
如果(类型== OP_SELL)价格=Bid。
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)。
// 如果上一次交易的利润 等于零,则将开出相同的交易。
{
GlobalVariableSet("AllowNewOrders", 0)。
类型=TypeLastHistOrder()。
如果(Type == OP_BUY) Price = Ask;
如果(类型== OP_SELL)价格=Bid。
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbol(), 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)//如果最后一笔交易是盈利的,订单就会被打开。
{
如果(GlobalVariableGet("AllowNewOrders")>0)返回。
如果(SignalBuy() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(, OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)。
如果(ticket>0)GlobalVariableSet("AllowNewOrders", 0)。
}
如果(SignalSell() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(, OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)。
如果(ticket>0)GlobalVariableSet("AllowNewOrders", 0)。
}
}
}
}
我没有检查过,因为我不明白一个总限价为1个订单的EA的多个副本如何决定在哪个符号上(在一个盈利系列之后)开始交易比较好?
请帮助根据消息进行交易。真的需要一个EA,它应该有两个主要功能。
第一个功能:在给定的时间,在距离价格给定的水平,用给定的TP和SL下挂单。
第二个功能:保持挂单与价格平行。这意味着将它们与价格一起移动(手动操作太麻烦了)。在特定的时间,在新闻发布的时刻,我们必须停止这一行动,并等到价格触及其中一个订单。此后,第二份订单立即被删除。
再一次。
在新闻发布前2分钟,在距离价格10个点的地方放上两个相反的止损单,立即启动与价格平行移动的功能,2分钟内与价格一起移动,一个订单远离价格,第二个追上价格。在新闻发布时,你应该禁用挂单移动的功能,然后等待其中一个订单的崩溃。第二个将在第一个崩溃后立即被删除。
如果你知道或遇到过这样的顾问,请分享一下
提前感谢您!
我可以把从文件中读取新闻的代码发给你,它可能会派上用场。每周一次,你看经济日历并把你应该注意的新闻的数据输入文件夹_with_terminal\MQL4\Files\novosti.txt,顾问甚至可以在新闻之前激活(你可以用这个顾问来跟踪美国会议的开始,例如--在有强烈运动的情况下)。我还没有完成交易代码,因为我被新闻严重 "欺骗 "了几次:))最新版本在不同的距离放置了6个订单(3个买入止损点+3个卖出止损点),有不同的止盈。总之,我的新闻代码可以使用,但我必须改进我的交易代码。
#属性严格
输入字符串 NewsFilename = "novosti.txt"; // 包含新闻的文本文件的名称。
输入 int MinutesBefore = 5; // 应该在新闻发布前多少分钟下单。
输入 int MinutesAfter1 = 15; // 新闻发布后多少分钟,删除第一组的订单
输入 int MinutesAfter2 = 30; // 在新闻发布后多少分钟删除第二组订单
输入 int MinutesAfter3 = 30; // 新闻发布后多少分钟内删除第3组订单
输入 int PriceIndent1 = 15; // 从价格中缩进的点数
输入 int PriceIndent2 = 5; // 从上一个TakeProfit开始往后退,单位是点。
输入 int TakeProfit1 = 40; // 第一组的TakeProfit大小,单位为点。
输入 int TakeProfit2 = 60; // 第二组的TakeProfit大小,单位为点。
输入 int TakeProfit3 = 100; // 第三组的TakeProfit大小,单位为点。
输入 int StopLoss = 20; // 所有订单的StopLoss大小,单位为点。
输入双倍数Multiplier1 = 1.0; // 对第二组的订单批次的系数
输入双倍数Multiplier2 = 2.0; // 对第三组的订单手数的系数。
输入 int MaximalRisk = 10; // 最大的风险,以百分数表示。
//====================================================================================================
datetime Times[200]; // LastTime;
string Symbols[200];
bool NewsPassed[200]。
int NewsCount。
//====================================================================================================
int OnInit()
{
// 加载新鲜的新闻
if (!LoadNews()) return(INIT_FAILED);
return(INIT_SUCCEEDED)。
}
//====================================================================================================
空白的OnTick()
{
if (!IsTradeAllowed()) return;
datetime TestTime = iTime(Symbol(), PERIOD_H1, 0)。
// 在每天开始时更新新闻
如果(TimeDay(TestTime) != TimeDay(LastTime))
{
LastTime = TestTime。
if (!LoadNews())
{
Alert("更新新闻错误!")。
返回。
}
}
//-------------------------------------------------------------------------------------------------
for (int i = 0; i < NewsCount; i++)
{
// Till新闻发布把订单作为突破口
如果(Times[i] > TimeCurrent() && Times[i] - TimeCurrent() <= MinutesBefore * 60 && !NewsPassed[i])
{
PrintFormat("当前时间是%s,是时候设置货币订单了 - %s", TimeToStr(TimeCurrent(), TIME_DATE|TIME_MINUTES), Symbols[i])。
SetupOrders(Symbols[i];
NewsPassed[i] = true。
}
}
//-------------------------------------------------------------------------------------------------
}
//====================================================================================================
bool LoadNews()
{
int Count, Tick = 0;
string Str, Data[40];
ResetLastError()。
如果(!FileIsExist(NewsFilename, 0))
{
PrintFormat("The news file %s does not exist.", NewsFilename)。
Print("该文件必须在文件夹\\MQL4\Files中,在测试的情况下-在文件夹\Tester\Files中。")。
return(false)。
}
int Handle = FileOpen(NewsFilename, FILE_READ|FILE_SHARE_READ|FILE_TXT) 。
如果(Handle != INVALID_HANDLE)
{
while (!FileIsEnding(Handle))
{
Str = FileReadString(Handle)。
Count = StringSplit(Str, StringGetChar(" ", 0), Data);
for (int i = 1; i < Count; i = i + 2)
{
Times[Tick] = StringToTime(Data[0] + " + Data[i])。
符号[Tick] = 数据[i + 1]。
Tick++;
}
}
FileClose(Handle)。
NewsCount = Tick;
for (int i = 0; i < NewsCount; i++)
{
如果(Times[i] > TimeCurrent())NewsPassed[i] = false。
否则NewsPassed[i] = false。
}
PrintFormat("Number of news uploaded - %i.", NewsCount);
return(true)。
}
PrintFormat("Can't open file %s.错误代码%d。", NewsFilename, GetLastError())。
return(false)。
}
//====================================================================================================
空白的SetupOrders(string Sym)。
{
int Ticket, Dig, Count;
双重价格,TP,SL,地段。
datetime KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter1) * 60;
string SymList[7];
//-------------------------------------------------------------------------------------------------
如果(Sym == "AUD")
{
SymList[0] = "AUDCAD"; SymList[1] = "AUDCHF"; SymList[2] = "AUDJPY"; SymList[3] = "AUDNZD";
SymList[4] = "AUDUSD"; SymList[5] = "EURAUD"; SymList[6] = "GBPAUD"。
}
//-------------------------------------------------------------------------------------------------
如果(Sym == "CAD")
{
SymList[0] = "AUDCAD"; SymList[1] = "CADCHF"; SymList[2] = "CADJPY"; SymList[3] = "EURCAD";
SymList[4] = "GBPCAD"; SymList[5] = "NZDCAD"; SymList[6] = "USDCAD";
}
//-------------------------------------------------------------------------------------------------
如果(Sym == "CHF")
{
SymList[0] = "AUDCHF"; SymList[1] = "CADCHF"; SymList[2] = "EURCHF"; SymList[3] = "GBPCHF"。
SymList[4] = "CHFJPY"; SymList[5] = "NZDCHF"; SymList[6] = "USDCHF"。
}
//-------------------------------------------------------------------------------------------------
如果(Sym == "EUR")
{
SymList[0] = "EURAUD"; SymList[1] = "EURCAD"; SymList[2] = "EURCHF"; SymList[3] = "EURGBP"。
SymList[4] = "EURJPY"; SymList[5] = "EURNZD"; SymList[6] = "EURUSD"。
}
//-------------------------------------------------------------------------------------------------
如果(Sym == "GBP")
{
SymList[0] = "EURGBP"; SymList[1] = "GBPAUD"; SymList[2] = "GBPCAD"; SymList[3] = "GBPCHF"。
SymList[4] = "GBPJPY"; SymList[5] = "GBPNZD"; SymList[6] = "GBPUSD"。
}
//-------------------------------------------------------------------------------------------------
如果(Sym == "JPY")
{
SymList[0] = "AUDJPY"; SymList[1] = "CADJPY"; SymList[2] = "CHFJPY"; SymList[3] = "EURJPY"。
SymList[4] = "GBPJPY"; SymList[5] = "NZDJPY"; SymList[6] = "USDJPY"。
}
//-------------------------------------------------------------------------------------------------
如果(Sym == "NZD")
{
SymList[0] = "AUDNZD"; SymList[1] = "EURNZD"; SymList[2] = "GBPNZD"; SymList[3] = "NZDCAD";
SymList[4] = "NZDCHF"; SymList[5] = "NZDJPY"; SymList[6] = "NZDUSD";
}
//-------------------------------------------------------------------------------------------------
如果(Sym == "USD")
{
SymList[0] = "AUSUSD"; SymList[1] = "EURUSD"; SymList[2] = "GBPUSD"; SymList[3] = "NZDUSD"。
SymList[4] = "USDCAD"; SymList[5] = "USDCHF"; SymList[6] = "USDJPY"。
}
//-------------------------------------------------------------------------------------------------
for (int i = 0; i < 7; i++)
{
计数=0。
Dig = int(MarketInfo(SymList[i], MODE_DIGITS))。
Lot = NormalizeDouble(0.01, 2);
//购买
KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter1) * 60;
Price = NormalizeDouble(MarketInfo(SymList[i], MODE_ASK) + PriceIndent1 / pow(10, Dig-1), Dig);
TP = NormalizeDouble(Price + TakeProfit1 / pow(10, Dig-1), Dig)。
SL = NormalizeDouble(Price - StopLoss / pow(10, Dig-1), Dig);
Ticket = OrderSend(SymList[i], OP_BUYSTOP, Lot, Price, 5, SL, TP, NULL, 0, KeepAlive, clrLimeGreen)。
if (Ticket > 0) Count++; else PrintFormat("Error creating order %i, symbol %s, price %f, Take %f, Stop %f, Lot %f.", GetLastError(), SymList[i], Price, TP, SL, Lot)。
KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter2) * 60;
价格=NormalizeDouble(TP + PriceIndent2 / pow(10, Dig-1), Dig)。
TP = NormalizeDouble(Price + TakeProfit2 / pow(10, Dig-1), Dig)。
SL = NormalizeDouble(Price - StopLoss / pow(10, Dig-1), Dig);
Ticket = OrderSend(SymList[i], OP_BUYSTOP, Lot * Multiplier1, Price, 5, SL, TP, NULL, 0, KeepAlive, clrLimeGreen)。
if (Ticket > 0) Count++; else PrintFormat("Error creating order %i, symbol %s, price %f, Take %f, Stop %f, Lot %f.", GetLastError(), SymList[i], Price, TP, SL, Lot*Multiplier1)
KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter3) * 60;
价格=NormalizeDouble(TP + PriceIndent2 / pow(10, Dig-1), Dig)。
TP = NormalizeDouble(Price + TakeProfit2 / pow(10, Dig-1), Dig)。
SL = NormalizeDouble(Price - StopLoss / pow(10, Dig-1), Dig);
Ticket = OrderSend(SymList[i], OP_BUYSTOP, Lot*Multiplier2, Price, 5, SL, TP, NULL, 0, KeepAlive, clrLimeGreen)。
if (Ticket > 0) Count++; else PrintFormat("Error creating order %i, symbol %s, price %f, take %f, stop %f, lot %f.", GetLastError(), SymList[i], Price, TP, SL, Lot*Multiplier2)
// 销售
KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter1) * 60;
Price = NormalizeDouble(MarketInfo(SymList[i], MODE_BID) - PriceIndent1 / pow(10, Dig-1), Dig);
TP = NormalizeDouble(Price - TakeProfit1 / pow(10, Dig-1), Dig)。
SL = NormalizeDouble(Price + StopLoss / pow(10, Dig-1), Dig);
Ticket = OrderSend(SymList[i], OP_SELLSTOP, Lot, Price, 5, SL, TP, NULL, 0, KeepAlive, clrOrangeRed)。
if (Ticket > 0) Count++; else PrintFormat("Error creating order %i, symbol %s, price %f, Take %f, Stop %f, Lot %f.", GetLastError(), SymList[i], Price, TP, SL, Lot)。
KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter2) * 60;
价格=NormalizeDouble(TP - PriceIndent2 / pow(10, Dig-1), Dig)。
TP = NormalizeDouble(Price - TakeProfit2 / pow(10, Dig-1), Dig)。
SL = NormalizeDouble(Price + StopLoss / pow(10, Dig-1), Dig);
Ticket = OrderSend(SymList[i], OP_SELLSTOP, Lot, Price, 5, SL, TP, NULL, 0, KeepAlive, clrOrangeRed)。
if (Ticket > 0) Count++; else PrintFormat("Error creating order %i, symbol %s, price %f, Take %f, Stop %f, Lot %f.", GetLastError(), SymList[i], Price, TP, SL, Lot*Multiplier1)
KeepAlive = TimeCurrent() + (MinutesBefore + MinutesAfter3) * 60;
价格=NormalizeDouble(TP - PriceIndent2 / pow(10, Dig-1), Dig)。
TP = NormalizeDouble(Price - TakeProfit3 / pow(10, Dig-1), Dig)。
SL = NormalizeDouble(Price + StopLoss / pow(10, Dig-1), Dig);
Ticket = OrderSend(SymList[i], OP_SELLSTOP, Lot, Price, 5, SL, TP, NULL, 0, KeepAlive, clrOrangeRed)。
PrintFormat("有%i个由符号%s下的订单", SymList[i], Count);0 }
}
新闻文件看起来像这样。
15.09.2016 01:45 NZD 04:30 AUD 10:30 CHF 14:00 GBP 15:30 USD
16.09.2016 15:30 USD 17:00 USD
等等...
让我们回到你的源代码。像这样试试吧。
int OnInit()
{
if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1);
return(INIT_SUCCEED)。
}
空白的OnDeInit()。
{
GlobalVariableSet("AllowNewOrders",1)。
}
空白的OnTick()
{
如果(CountTrades() == 0) // 订单的数量必须为零
{
如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) )
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))
// 如果最后一笔交易是亏损的,则开出相同的交易,但手数更大。
{
GlobalVariableSet("AllowNewOrders", 0)。
类型=TypeLastHistOrder()。
如果(Type == OP_BUY) Price = Ask;
如果(类型== OP_SELL)价格=Bid。
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)。
// 如果上一次交易的利润等于零,则将开出相同的交易。
{
GlobalVariableSet("AllowNewOrders", 0)。
类型=TypeLastHistOrder()。
如果(Type == OP_BUY) Price = Ask;
如果(类型== OP_SELL)价格=Bid。
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbol(), 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)//如果最后一笔交易是盈利的,订单就会被打开。
{
如果(GlobalVariableGet("AllowNewOrders")>0)返回。
如果(SignalBuy() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(, OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)。
如果(ticket>0)GlobalVariableSet("AllowNewOrders", 0)。
}
如果(SignalSell() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(, OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)。
如果(ticket>0)GlobalVariableSet("AllowNewOrders", 0)。
}
}
}
}
我没有检查过,因为我不明白一个总限价为1个订单的EA的几个副本如何检测哪个符号(在一个盈利系列之后)开始交易比较好?
亚历山大,机器人必须等待每个符号在一个方向上的指定数量的蜡烛,然后开始一个系列,也就是说,在哪个符号这个条件首先被触发,为该符号打开第一笔交易。同时,你应该禁止为其他符号打开一个系列,直到第一个系列完成盈利。
你给出的最后一个代码是一个进步--它根本没有打开任何交易(即,禁令是有效的)。我完全不明白为什么没有。所附的是日志的截图。
也许现在是时候学习如何插入代码 了!