脚本: Pending orders DOWN - 页 3 123456 新评论 Vladimir Karputov 2018.12.15 19:41 #21 Михаил Рымарь:您好,这个脚本非常棒,是 MQ5 上唯一的一个,但我想在我的武器库中也有同样的脚本,但数量要多一些,比如 1 或 0.5。感谢您的辛勤劳动,祝您节日快乐。在这个系列中,最初的想法是使用最小批量。因此,目前只能到此为止。 Mjame116 2019.04.10 17:15 #22 你好,先生。您能帮我一下吗?我怎样才能将代码调整到我想要的手数。我试过几次,改变了 inplots:我是新手,希望有办法改变它。谢谢//+------------------------------------------------------------------+ //|挂单下降。mq5 //|版权 © 2017, 弗拉基米尔-卡尔普托夫 || //|http://wmua.ru/slesar/ || //+------------------------------------------------------------------+ #property copyright "版权归弗拉基米尔-卡尔普托夫 2017 所有 #property link "http://wmua.ru/slesar/" #property version "1.002" #property description "The script sets the pending orders down from the price" #property script_show_inputs //--- #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh> CTrade m_trade; // 交易对象 CSymbolInfo m_symbol; // 符号信息对象 //+------------------------------------------------------------------+ //| 挂单枚举 DOWN| //+------------------------------------------------------------------+ enum ENUM_PENDING_ORDERS_DOWN { buy_limit =0, // 购买限额 sell_stop =3 // 卖出止损 }; //--- 输入参数 input ushort InpDownGep = 10; // 从当前价格向下挂单的缺口(以点为单位) input ushort InpDownStep = 3; // 下达订单之间的间隔(以点为单位) input ENUM_PENDING_ORDERS_DOWN InpDownOrders = buy_limit; // 挂单类型 DOWN input uchar InpDownQuantity = 33; // 下降数量 input double InpLots = 5; // 很多 input ushort InpStopLoss = 100; // 止损(单位:点) input ushort InpTakeProfit = 100; // 止盈(点数) //--- ulong m_slippage=1; // 滑动 double m_adjusted_point; // 点值调整为 3 点或 5 点 double ExtDownGep=0.0; double ExtDownStep=0.0; double ExtStopLoss=0.0; double ExtTakeProfit=0.0; //+------------------------------------------------------------------+ //| 脚本程序启动功能| //+------------------------------------------------------------------+ void OnStart() { //--- if(InpLots<=0.0) { Print("The \"Lots\" can't be smaller or equal to zero"); return; } //--- if(!m_symbol.Name(Symbol())) // 设置符号名称 return; if(!RefreshRates()) return; string err_text=""; if(!CheckVolumeValue(InpLots,err_text)) { Print(err_text); return; } //--- if(IsFillingTypeAllowed(SYMBOL_FILLING_FOK)) m_trade.SetTypeFilling(ORDER_FILLING_FOK); else if(IsFillingTypeAllowed(SYMBOL_FILLING_IOC)) m_trade.SetTypeFilling(ORDER_FILLING_IOC); else m_trade.SetTypeFilling(ORDER_FILLING_RETURN); //--- m_trade.SetDeviationInPoints(m_slippage); m_trade.SetAsyncMode(true); //--- 调整 3 或 5 位数 int digits_adjust=1; if(m_symbol.Digits()==3 || m_symbol.Digits()==5) digits_adjust=10; m_adjusted_point=m_symbol.Point()*digits_adjust; ExtDownGep = m_adjusted_point * InpDownGep; ExtDownStep = m_adjusted_point * InpDownStep; ExtStopLoss = m_adjusted_point * InpStopLoss; ExtTakeProfit = m_adjusted_point * InpTakeProfit; //--- 开始工作 double start_price_ask=m_symbol.Ask()-ExtDownGep; double start_price_bid=m_symbol.Bid()-ExtDownGep; //--- 挂单下降 for(int i=0;i<InpDownQuantity;i++) { double price_ask = start_price_ask-i*ExtDownStep; double price_bid = start_price_bid-i*ExtDownStep; if(InpDownOrders==buy_limit) { double sl = (ExtStopLoss==0.0) ? 0.0 : price_ask - ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_ask + ExtTakeProfit; m_trade.BuyLimit(m_symbol.LotsMax(),m_symbol.NormalizePrice(price_ask),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } else { double sl = (ExtStopLoss==0.0) ? 0.0 : price_bid + ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_bid - ExtTakeProfit; m_trade.SellStop(m_symbol.LotsMax(),m_symbol.NormalizePrice(price_bid),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } } } //+------------------------------------------------------------------+ //| 刷新符号报价数据| //+------------------------------------------------------------------+ bool RefreshRates() { //--- 刷新率 if(!m_symbol.RefreshRates()) return(false); //--- 防止返回值为 "零" if(m_symbol.Ask()==0 || m_symbol.Bid()==0) return(false); //--- return(true); } //+------------------------------------------------------------------+ //| 检查订单量的正确性 //+------------------------------------------------------------------+ bool CheckVolumeValue(double volume,string &error_description) { //--- 允许的最低贸易量 double min_volume=m_symbol.LotsMin(); if(volume<min_volume) { error_description=StringFormat("Volume is less than the minimal allowed SYMBOL_VOLUME_MIN=%.2f",min_volume); return(false); } //-- 允许的最大贸易业务量 double max_volume=m_symbol.LotsMax(); if(volume>max_volume) { error_description=StringFormat("Volume is greater than the maximal allowed SYMBOL_VOLUME_MAX=%.2f",max_volume); return(false); } //--- 获得体积变化的最小步长 double volume_step=m_symbol.LotsStep(); int ratio=(int)MathRound(volume/volume_step); if(MathAbs(ratio*volume_step-volume)>0.0000001) { error_description=StringFormat("Volume is not a multiple of the minimal step SYMBOL_VOLUME_STEP=%.2f, the closest correct volume is %.2f", volume_step,ratio*volume_step); return(false); } error_description="Correct volume value"; return(true); } //+------------------------------------------------------------------+ //| 检查是否允许指定的填充模式 //+------------------------------------------------------------------+ bool IsFillingTypeAllowed(int fill_type) { //--- 获取描述允许填充模式的属性值 int filling=m_symbol.TradeFillFlags(); //--- 如果允许使用 fill_type 模式,则返回 true return((filling & fill_type)==fill_type); } //+------------------------------------------------------------------+ Vladimir Karputov 2019.04.10 17:29 #23 Mjame116 : 你好,先生。您能帮我一下吗?我怎样才能将代码调整到我想要的手数。我试过几次,改变了 inplots:我是新手,希望有办法改变它。谢谢有必要将输入参数 Lots 替换为最小手数。 //--- 挂单下降 for(int i=0;i<InpDownQuantity;i++) { double price_ask = start_price_ask-i*ExtDownStep; double price_bid = start_price_bid-i*ExtDownStep; if(InpDownOrders==buy_limit) { double sl = (ExtStopLoss==0.0) ? 0.0 : price_ask - ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_ask + ExtTakeProfit; m_trade.BuyLimit(m_symbol.LotsMin(),m_symbol.NormalizePrice(price_ask),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } else { double sl = (ExtStopLoss==0.0) ? 0.0 : price_bid + ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_bid - ExtTakeProfit; m_trade.SellStop(m_symbol.LotsMin(),m_symbol.NormalizePrice(price_bid),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } } }需要这样做: //--- 挂单下降 for(int i=0;i<InpDownQuantity;i++) { double price_ask = start_price_ask-i*ExtDownStep; double price_bid = start_price_bid-i*ExtDownStep; if(InpDownOrders==buy_limit) { double sl = (ExtStopLoss==0.0) ? 0.0 : price_ask - ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_ask + ExtTakeProfit; m_trade.BuyLimit(InpLots,m_symbol.NormalizePrice(price_ask),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } else { double sl = (ExtStopLoss==0.0) ? 0.0 : price_bid + ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_bid - ExtTakeProfit; m_trade.SellStop(InpLots,m_symbol.NormalizePrice(price_bid),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } } } Mjame116 2019.04.11 11:11 #24 Vladimir Karputov:有必要将输入参数Lots 设置为最小批量,而不是最小批量。需要这样做: 非常感谢先生,我真的很感激 Uladzislau Miarzlou 2019.10.07 20:09 #25 你好,这个脚本很棒,运行得很好。 我正在使用同一个脚本来设置渔网,我想请教您:能否将它们合二为一?我的意思是一个脚本,可以同时设置向上和向下的订单网,长网和短网的参数相同。 Vladimir Karputov 2019.10.08 08:58 #26 mason_one:您好,脚本很棒,运行正常。我正在使用同一个脚本来设置渔网,我想请教您:能否将它们合二为一?我的意思是一个脚本,可以同时设置向上和向下的订单网,长网和短网的参数相同。 谢谢您的关注。我正在发布一个脚本(不是智能交易系统),该脚本可以设置一个向上和向下的挂单 网格 -挂单向上向下。 Carlos Devia 2019.11.07 04:28 #27 您好,弗拉基米尔,您的脚本非常有趣,效果很好,但我希望您能告诉我如何将 lotaje 从 0.01 改为 0.03。我将继续关注并提前感谢您,我的朋友。 Vladimir Karputov 2019.11.07 04:58 #28 Carlos Devia : 您好,弗拉基米尔,您的脚本非常有趣,效果很好,但我希望您能告诉我如何将 lotaje 从 0.01 改为 0.03。我将继续关注并提前感谢您,我的朋友。 在这段代码中,请将"InpLots"改为"m_symbol.LotsMin()": //--- 挂单下降 for(int i=0;i<InpDownQuantity;i++) { double price_ask = start_price_ask-i*ExtDownStep; double price_bid = start_price_bid-i*ExtDownStep; if(InpDownOrders==buy_limit) { double sl = (ExtStopLoss==0.0) ? 0.0 : price_ask - ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_ask + ExtTakeProfit; m_trade.BuyLimit(m_symbol.LotsMin(),m_symbol.NormalizePrice(price_ask),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } else { double sl = (ExtStopLoss==0.0) ? 0.0 : price_bid + ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_bid - ExtTakeProfit; m_trade.SellStop(m_symbol.LotsMin(),m_symbol.NormalizePrice(price_bid),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } } Carlos Devia 2019.11.08 04:00 #29 亲爱的弗拉基米尔,此时此刻你就像我的神。你不知道我一直在寻找这个问题,我真的很感激你能抽出时间回答我。我是一个对交易充满热情的人,我所知道的一点东西都是从像您这样的人那里学来的。 如果可以的话,我想问您最后一个问题。 我在键盘上设置了一个热键 我在键盘上设置了一个热键来激活我的卖出止损订单,但在激活之前,会打开一个窗口,我希望不要打开这个窗口,而只是立即执行我的订单。 现附上打开窗口的图片。 我希望得到您的帮助,使 Vladimir 的窗口不再出现,因为当窗口打开时,我必须"接受"参数,而这一过程会浪费我的时间。 附加的文件: pending_orders.png 29 kb Vladimir Karputov 2019.11.08 07:20 #30 Carlos Devia :亲爱的弗拉基米尔,此时此刻你就像我的神。你不知道我一直在寻找这个问题,我真的很感激你能抽出时间回答我。我是一个对交易充满热情的人,我所知道的一切都是从像您这样的人身上学到的。如果可能的话,我想问您最后一个问题,我在键盘上设置了一个热键。我在键盘上设置了一个热键来激活我的卖出止损单,但在激活之前会打开一个窗口,我不希望打开这个窗口,而只希望立即执行我的订单。我附上打开窗口的图片。我希望能得到您的帮助,使 Vladimir 的窗口不再出现,因为当窗口打开时,我必须 "接受 "参数,而在这个过程中我会浪费时间。 热键不是办法:无论如何,在启动时输入参数都是可见的。 我建议另一种方法: 写一个顾问--一个面板,在面板中所有东西都有一个 "启动 "按钮。 启动顾问时,一旦设置了输入参数 启动后,图表上会出现一个小面板:点击面板上的 "开始 "按钮后,挂单就会被下达(所有参数都取自输入参数)。 面板示例: 您可以在市场 上搜索此类面板,或在自由职业者 服务中订购。 123456 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
您好,这个脚本非常棒,是 MQ5 上唯一的一个,但我想在我的武器库中也有同样的脚本,但数量要多一些,比如 1 或 0.5。
感谢您的辛勤劳动,祝您节日快乐。
在这个系列中,最初的想法是使用最小批量。因此,目前只能到此为止。
你好,先生。您能帮我一下吗?我怎样才能将代码调整到我想要的手数。我试过几次,改变了 inplots:我是新手,希望有办法改变它。谢谢
有必要将输入参数 Lots 替换为最小手数。
需要这样做:
有必要将输入参数Lots 设置为最小批量,而不是最小批量。
需要这样做:
你好,这个脚本很棒,运行得很好。
我正在使用同一个脚本来设置渔网,我想请教您:能否将它们合二为一?我的意思是一个脚本,可以同时设置向上和向下的订单网,长网和短网的参数相同。
您好,脚本很棒,运行正常。
我正在使用同一个脚本来设置渔网,我想请教您:能否将它们合二为一?我的意思是一个脚本,可以同时设置向上和向下的订单网,长网和短网的参数相同。
谢谢您的关注。我正在发布一个脚本(不是智能交易系统),该脚本可以设置一个向上和向下的挂单 网格 -挂单向上向下。
您好,弗拉基米尔,您的脚本非常有趣,效果很好,但我希望您能告诉我如何将 lotaje 从 0.01 改为 0.03。我将继续关注并提前感谢您,我的朋友。
在这段代码中,请将"InpLots"改为"m_symbol.LotsMin()":
亲爱的弗拉基米尔,此时此刻你就像我的神。你不知道我一直在寻找这个问题,我真的很感激你能抽出时间回答我。我是一个对交易充满热情的人,我所知道的一点东西都是从像您这样的人那里学来的。
如果可以的话,我想问您最后一个问题。 我在键盘上设置了一个热键
我在键盘上设置了一个热键来激活我的卖出止损订单,但在激活之前,会打开一个窗口,我希望不要打开这个窗口,而只是立即执行我的订单。
现附上打开窗口的图片。
我希望得到您的帮助,使 Vladimir 的窗口不再出现,因为当窗口打开时,我必须"接受"参数,而这一过程会浪费我的时间。
亲爱的弗拉基米尔,此时此刻你就像我的神。你不知道我一直在寻找这个问题,我真的很感激你能抽出时间回答我。我是一个对交易充满热情的人,我所知道的一切都是从像您这样的人身上学到的。
如果可能的话,我想问您最后一个问题,我在键盘上设置了一个热键。
我在键盘上设置了一个热键来激活我的卖出止损单,但在激活之前会打开一个窗口,我不希望打开这个窗口,而只希望立即执行我的订单。
我附上打开窗口的图片。
我希望能得到您的帮助,使 Vladimir 的窗口不再出现,因为当窗口打开时,我必须 "接受 "参数,而在这个过程中我会浪费时间。
热键不是办法:无论如何,在启动时输入参数都是可见的。
我建议另一种方法:
面板示例:
您可以在市场 上搜索此类面板,或在自由职业者 服务中订购。