新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1705 1...169816991700170117021703170417051706170717081709171017111712...1953 新评论 Galim_V 2021.10.31 14:32 #17041 问候,该脚本按我的要求工作。 //+------------------------------------------------------------------+ //| Око_15.mq4 | //| Copyright 2019, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2019, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //#include <OOP_CLibArr_01.mqh> struct Gass { int mag; double prof; }; Gass plus[]= {{0},{0}}; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class Ohistory { public: Ohistory( string _sy = "", int _op =-1, int _mn =-1, datetime _dt =0 ) { int k=3; GetProfit_His(_sy, _op, _mn, 0); Alert("Конструктор"," k =",k); } ~Ohistory() { Alert("Деструктор"); } double inits(Gass& us[],int _magik,datetime _zeit) { double pro=GetProfit_His(Symbol(), -1, _magik, _zeit); for(int i=0; i<ArraySize(us); i++) { if(us[i].mag==3) pro+=us[i].prof; } return(pro); } private: double GetProfit_His(string sy="", int op=-1, int mn=-1, datetime dt=0) { double p=0; int i, k=OrdersHistoryTotal(); if(sy=="") sy=Symbol(); for(i=0; i<k; i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { if(mn<0 || OrderMagicNumber()==mn) { if(dt<OrderCloseTime()) { p+=OrderProfit()+OrderCommission()+OrderSwap(); } } } } } } Alert(" p =",p); return(p); } }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int si=5, m=3; ArrayResize(plus,si); for(int i=0; i<ArraySize(plus); i++) plus[i].mag=m; int size=ArraySize(plus); if(si>=3) { switch(size==0) { case 0: if(plus[0].mag==m) plus[0].prof=400; case 1: if(plus[1].mag==m) plus[1].prof=300; ; case 2: if(plus[1].mag==5) plus[2].prof=90; } } for(int i=0; i<ArraySize(plus); i++) { Print(" plus[i].prof =",plus[i].prof); } Ohistory hi; Alert("Мужду"); Print(" Сколько ???', ",hi.inits(plus,-1,D'2021.10.28')); } //+------------------------------------------------------------------+ 但如果我移动它 class Ohistory 到包含文件中,它就不再看到结构数组的 struct Gass { int mag; double prof; }; Gass plus[]= {{0},{0}}; 这条线 double inits(Gass& us[],int _magik,datetime _zeit) 并非如此。我搞不清楚如何解决这个问题。 EVGENII SHELIPOV 2021.10.31 14:52 #17042 你能给我一个提示吗?这里有两个函数来计算和显示订单的价格格和最小/最大订单。我在前一个函数的类似物的基础上,自己写了后一个函数。第一条按预期工作,但第二条,即最小/最大订单价格,不愿意在图表上显示。 请帮助我们找到这个错误。请帮助我找到这个错误。 //+----------------------------------------------------------------------------+ //| Расчет средней цены (0)-buy (1)-sell ()-all | //+----------------------------------------------------------------------------+ double GetAveragePrice(int ot=-1) { double order_lots = 0, order_price = 0, avg_price = 0; { for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType()==ot||ot<0) { order_lots += OrderLots(); order_price += OrderOpenPrice() * OrderLots(); } } } } } avg_price = NormalizeDouble(order_price / order_lots, Digits); if(ObjectFind(0,"AveragePriceLine"+IntegerToString(ot))!=0) ObjectCreate(0,"AveragePriceLine"+IntegerToString(ot),OBJ_HLINE, 0, 0, avg_price); else ObjectSetDouble(0,"AveragePriceLine"+IntegerToString(ot),OBJPROP_PRICE,avg_price); if(ot==0) ObjectSet("AveragePriceLine"+IntegerToString(ot),OBJPROP_COLOR, clrLime); if(ot==1) ObjectSet("AveragePriceLine"+IntegerToString(ot),OBJPROP_COLOR, clrRed); return(avg_price); } //+----------------------------------------------------------------------------+ //| Расчет средней цены мин и макс ордеров(0)-buy (1)-sell ()-all | //+----------------------------------------------------------------------------+ double GetAveragePriceManMaxOrders(int ot =-1) { double avg_price_min_max_orders = 0; { for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType()==ot||ot<0) { avg_price_min_max_orders = NormalizeDouble((PriceMaxOrder()*FindLastLots() + PriceMinOrder()*GetMinLotOrder()) /(FindLastLots() + GetMinLotOrder()),Digits()); if(ObjectFind(0,"AveragePriceLineMinMaxOrders"+IntegerToString(ot))!=0) ObjectCreate(0,"AveragePriceLineMinMaxOrders"+IntegerToString(ot),OBJ_HLINE, 0, 0, avg_price_min_max_orders); else ObjectSetDouble(0,"AveragePriceLineMinMaxOrders"+IntegerToString(ot),OBJPROP_PRICE, avg_price_min_max_orders); if(ot==0) ObjectSet("AveragePriceLineMinMaxOrders"+IntegerToString(ot),OBJPROP_COLOR, clrLime); ObjectSet("AveragePriceLineMinMaxOrders", OBJPROP_STYLE, STYLE_DASH); if(ot==1) ObjectSet("AveragePriceLineMinMaxOrders"+IntegerToString(ot),OBJPROP_COLOR, clrRed); ObjectSet("AveragePriceLineMinMaxOrders", OBJPROP_STYLE, STYLE_DASH); } } } } } return(avg_price_min_max_orders); } Tretyakov Rostyslav 2021.10.31 15:00 #17043 EVGENII SHELIPOV #:你能给我一个提示吗?这里有两个函数来计算和显示订单的价格格和最小/最大订单。我在前一个函数的类似物的基础上,自己写了后一个函数。第一条按预期工作,但第二条,即最小/最大订单价格,不愿意在图表上显示。请帮助我们找到这个错误。请帮助我找到这个错误。 //+----------------------------------------------------------------------------+ //| Расчет средней цены мин и макс | //+----------------------------------------------------------------------------+ double GetAveragePriceManMaxOrders() { double avg_price_min_max_orders = 0; double avg=NormalizeDouble((PriceMaxOrder()*FindLastLots() + PriceMinOrder()*GetMinLotOrder()) /(FindLastLots() + GetMinLotOrder()),Digits()); if(avg>0) { avg_price_min_max_orders = avg; if(ObjectFind(0,"AveragePriceLineMinMaxOrders"+IntegerToString(ot))!=0) ObjectCreate(0,"AveragePriceLineMinMaxOrders"+IntegerToString(ot),OBJ_HLINE, 0, 0, avg_price_min_max_orders); else ObjectSetDouble(0,"AveragePriceLineMinMaxOrders"+IntegerToString(ot),OBJPROP_PRICE, avg_price_min_max_orders); if(ot==0) ObjectSet("AveragePriceLineMinMaxOrders"+IntegerToString(ot),OBJPROP_COLOR, clrLime); ObjectSet("AveragePriceLineMinMaxOrders", OBJPROP_STYLE, STYLE_DASH); if(ot==1) ObjectSet("AveragePriceLineMinMaxOrders"+IntegerToString(ot),OBJPROP_COLOR, clrRed); ObjectSet("AveragePriceLineMinMaxOrders", OBJPROP_STYLE, STYLE_DASH); } return(avg_price_min_max_orders); } EVGENII SHELIPOV 2021.10.31 15:32 #17044 MakarFX #: 不,马卡,这没有用。 Tretyakov Rostyslav 2021.10.31 16:08 #17045 EVGENII SHELIPOV #:不,马卡,这没有用。 列出功能 最大价格订单() 查找最后的地段() 最小订单价格(PriceMinOrder)。 获取最小订单(GetMinLotOrder)。 查找最后的地段() 获取最小订单(GetMinLotOrder)。 EVGENII SHELIPOV 2021.10.31 16:14 #17046 MakarFX #:列出功能 最大价格订单()查找最后的地段()最小订单价格(PriceMinOrder)。获取最小订单(GetMinLotOrder)。查找最后的地段()获取最小订单(GetMinLotOrder)。 //+----------------------------------------------------------------------------+ //| Определение размера лота последнего ордера | //+----------------------------------------------------------------------------+ double FindLastLots() { int oldticket; double oldlots = 0; ticket = 0; for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY || OrderType() == OP_SELL) { oldticket = OrderTicket(); if(oldticket > ticket) { ticket = oldticket; oldlots = OrderLots(); } } } } } return(oldlots); } //+----------------------------------------------------------------------------+ //| Определение цены открытия макс лота | //+----------------------------------------------------------------------------+ double PriceMaxOrder() { double max_price = 0 ; max_ticket = 0; { for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY || OrderType() == OP_SELL) { if(OrderTicket() > max_ticket) { max_ticket = OrderTicket(); max_price = OrderOpenPrice(); } } } } } } return(max_price); } //+----------------------------------------------------------------------------+ //| Определение размера лота минимального ордера в сетке | //+----------------------------------------------------------------------------+ double GetMinLotOrder() { double min_lot_order = 0; min_ticket=INT_MAX; { for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY || OrderType() == OP_SELL) { if(OrderTicket() < min_ticket) { min_ticket = OrderTicket(); min_lot_order = OrderLots(); } } } } } } return(min_lot_order); } //+----------------------------------------------------------------------------+ //| Определение цены открытия мин лота | //+----------------------------------------------------------------------------+ double PriceMinOrder() { double min_price = 0; min_ticket=INT_MAX; { for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY || OrderType() == OP_SELL) { if(OrderTicket() < min_ticket) { min_ticket = OrderTicket(); min_price = OrderOpenPrice(); } } } } } } return(min_price); } Tretyakov Rostyslav 2021.10.31 16:23 #17047 EVGENII SHELIPOV #: //+----------------------------------------------------------------------------+ //| Расчет средней цены мин и макс | //+----------------------------------------------------------------------------+ double GetAveragePriceManMaxOrders() { double avg_price_min_max_orders = 0; if(OrdersTotal()>1) { avg_price_min_max_orders = NormalizeDouble((PriceMaxOrder()*FindLastLots() + PriceMinOrder() *GetMinLotOrder())/(FindLastLots() + GetMinLotOrder()),Digits()); if(ObjectFind(0,"AveragePriceLineMinMaxOrders")!=0) ObjectCreate(0,"AveragePriceLineMinMaxOrders",OBJ_HLINE, 0, 0, avg_price_min_max_orders); else ObjectSetDouble(0,"AveragePriceLineMinMaxOrders",OBJPROP_PRICE, avg_price_min_max_orders); } return(avg_price_min_max_orders); } Alexey Viktorov 2021.10.31 16:25 #17048 Galim_V #:问候,该脚本按我的要求工作。但如果我移动它到包含文件中,它就不再看到结构数组的这条线并非如此。我想不出如何解决这个问题。 把结构也移到include文件中,在类的上方。 Galim_V 2021.10.31 17:08 #17049 Alexey Viktorov #:把结构也移到include文件中,在类的上方。 好的!)谢谢你,阿列克谢 EVGENII SHELIPOV 2021.10.31 17:17 #17050 MakarFX #: 马卡有些不对劲。喜欢它,谢谢你。我自己找到了一个不那么漂亮的选项,但它是有效的。 1...169816991700170117021703170417051706170717081709171017111712...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
问候,该脚本按我的要求工作。
但如果我移动它
class Ohistory
到包含文件中,它就不再看到结构数组的
这条线
并非如此。我搞不清楚如何解决这个问题。
你能给我一个提示吗?这里有两个函数来计算和显示订单的价格格和最小/最大订单。我在前一个函数的类似物的基础上,自己写了后一个函数。第一条按预期工作,但第二条,即最小/最大订单价格,不愿意在图表上显示。
请帮助我们找到这个错误。请帮助我找到这个错误。
你能给我一个提示吗?这里有两个函数来计算和显示订单的价格格和最小/最大订单。我在前一个函数的类似物的基础上,自己写了后一个函数。第一条按预期工作,但第二条,即最小/最大订单价格,不愿意在图表上显示。
请帮助我们找到这个错误。请帮助我找到这个错误。
不,马卡,这没有用。
不,马卡,这没有用。
列出功能
最大价格订单()
查找最后的地段()
最小订单价格(PriceMinOrder)。
获取最小订单(GetMinLotOrder)。
查找最后的地段()
获取最小订单(GetMinLotOrder)。
列出功能
最大价格订单()
查找最后的地段()
最小订单价格(PriceMinOrder)。
获取最小订单(GetMinLotOrder)。
查找最后的地段()
获取最小订单(GetMinLotOrder)。
问候,该脚本按我的要求工作。
但如果我移动它
到包含文件中,它就不再看到结构数组的
这条线
并非如此。我想不出如何解决这个问题。
把结构也移到include文件中,在类的上方。
把结构也移到include文件中,在类的上方。
好的!)谢谢你,阿列克谢
马卡有些不对劲。喜欢它,谢谢你。我自己找到了一个不那么漂亮的选项,但它是有效的。