新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1349 1...134213431344134513461347134813491350135113521353135413551356...1953 新评论 Tretyakov Rostyslav 2021.01.11 11:27 #13481 Порт-моне тв:我 不知道为什么你的不工作,我以前也试过,我不记得了!"。总之,谢谢大家有一个良好的交易! 你能不能把开仓交易的代码贴出来,我看看为什么不成功? Alekseu Fedotov 2021.01.11 11:39 #13482 MakarFX:不参数0表示属于此图 对不起,我对这个功能感到困惑 StringFind Порт-моне тв 2021.01.11 11:41 #13483 MakarFX:你能不能把开仓交易的代码贴出来,我看看为什么不成功? //+------------------------------------------------------------------+ //| равноудаленный канал.mq4 | //+------------------------------------------------------------------+ #property copyright "" #property link "" #property version "1.00" #property strict extern int Magic = 777701; extern double Lot = 0.01; extern int Slippage = 3; double pXa, pXb; int ticket; int OrderOfSymbol; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- //Проверим что есть ли равноудаленный канал: if(ObjectsTotal(OBJ_RECTANGLE)==0) {Comment("Нарисуйте равноудаленный канал для открытия сделки по покупке!");} //Получим ИМЯ прямоугольника: for(int n=0;n<ObjectsTotal();n++) { string name=ObjectName(n); if(ObjectType(name)==OBJ_RECTANGLE) { if(ObjectFind(0,"BUY")==0) { datetime t1a = (datetime) ObjectGet(name,OBJPROP_TIME1); datetime t2a = (datetime) ObjectGet(name,OBJPROP_TIME2); double p1a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits); double p2a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits); OrderOfSymbol=CounterOrderTradeType(-1); if (OrderOfSymbol<1) if (Close[1]>Open[1]) if(TimeCurrent()>t1a && TimeCurrent()< t2a && Bid < p1a && Bid > p2a ) { ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, 0, 0, "открыт ордер на покупку", Magic, 0, Blue); } } } } //Проверим что есть ли уже равноудаленный канал и он в единственном экземпляре: if(ObjectsTotal(OBJ_RECTANGLE)==1) {Comment("Нарисуйте второй равноудаленный канал для закрытия сделки по покупке!");} //Получим ИМЯ прямоугольника: for(int n=0;n<ObjectsTotal();n++) { string name=ObjectName(n); if(ObjectType(name)==OBJ_RECTANGLE) { if(ObjectFind(0,"CLOSE")==0) { datetime t1b = (datetime) ObjectGet(name,OBJPROP_TIME1); datetime t2b = (datetime) ObjectGet(name,OBJPROP_TIME2); double p1b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits); double p2b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits); if(TimeCurrent()>t1b && TimeCurrent()< t2b && Bid < p1b && Bid > p2b ) CloseBuyPositions1(); } } } //Проверим что есть ли уже 2 равноудаленных канала: if(ObjectsTotal(OBJ_CHANNEL)==2) {Comment("Каналы по открытию и закрытию ордеров по покупке выставлены - идет торговля!");} } //+------------------------------------------------------------------+ void CloseBuyPositions1() { for(int i = OrdersTotal() - 1; i >= 0; i--) if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if(OrderMagicNumber() == Magic) if(OrderSymbol() == Symbol()) { if(OrderType()==OP_BUY) { if(OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL)){Print("Order Close");} } } } //+------------------------------------------------------------------+ //| Подсчет ордеров потекущему символу | //+------------------------------------------------------------------+ int CounterOrderTradeType(ENUM_ORDER_TYPE order_type) { int cnt=0; //---- for(int pos=OrdersTotal()-1;pos>=0;pos--) { if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) continue; if(OrderSymbol()!=_Symbol) continue; if(order_type == OrderType() || order_type == -1) cnt++; } //---- return(cnt); } 下面是粘贴你的函数 Tretyakov Rostyslav 2021.01.11 11:58 #13484 Порт-моне тв:这里粘贴了你的特征首先OrderOfSymbol=CounterOrderTradeType(-1); 应该放在这里。void OnTick() { OrderOfSymbol=CounterOrderTradeType(-1); 剩下的我来解决。 Tretyakov Rostyslav 2021.01.11 12:10 #13485 Порт-моне тв:下面是粘贴你的函数 尝试 //+------------------------------------------------------------------+ //| равноудаленный канал.mq4 | //+------------------------------------------------------------------+ #property copyright "" #property link "" #property version "1.00" #property strict extern int Magic = 777701; extern double Lot = 0.01; extern int Slippage = 3; double pXa, pXb; int ticket; int OrderOfSymbol; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- OrderOfSymbol=CounterOrderTradeType(-1); //Проверим что есть ли равноудаленный канал: if(ObjectFind(0,"BUY")!=0) {Comment("Нарисуйте равноудаленный канал для открытия сделки по покупке!");} if(ObjectFind(0,"BUY")==0) { datetime t1a = (datetime) ObjectGet("BUY",OBJPROP_TIME1); datetime t2a = (datetime) ObjectGet("BUY",OBJPROP_TIME2); double p1a=NormalizeDouble(ObjectGet("BUY",OBJPROP_PRICE1),Digits); double p2a=NormalizeDouble(ObjectGet("BUY",OBJPROP_PRICE2),Digits); if (OrderOfSymbol<1) if (Close[1]>Open[1]) if(TimeCurrent()>t1a && TimeCurrent()< t2a && Bid < p1a && Bid > p2a ) { ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, 0, 0, "открыт ордер на покупку", Magic, 0, Blue); } } //Проверим что есть ли уже равноудаленный канал и он в единственном экземпляре: if(ObjectFind(0,"CLOSE")!=0) {Comment("Нарисуйте второй равноудаленный канал для закрытия сделки по покупке!");} //Получим ИМЯ прямоугольника: if(ObjectFind(0,"CLOSE")==0) { datetime t1b = (datetime) ObjectGet("CLOSE",OBJPROP_TIME1); datetime t2b = (datetime) ObjectGet("CLOSE",OBJPROP_TIME2); double p1b=NormalizeDouble(ObjectGet("CLOSE",OBJPROP_PRICE1),Digits); double p2b=NormalizeDouble(ObjectGet("CLOSE",OBJPROP_PRICE2),Digits); if(TimeCurrent()>t1b && TimeCurrent()< t2b && Bid < p1b && Bid > p2b ) CloseBuyPositions1(); } //Проверим что есть ли уже 2 равноудаленных канала: if(ObjectsTotal(OBJ_CHANNEL)==2) {Comment("Каналы по открытию и закрытию ордеров по покупке выставлены - идет торговля!");} } //+------------------------------------------------------------------+ void CloseBuyPositions1() { for(int i = OrdersTotal() - 1; i >= 0; i--) if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if(OrderMagicNumber() == Magic) if(OrderSymbol() == Symbol()) { if(OrderType()==OP_BUY) { if(OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL)){Print("Order Close");} } } } //+------------------------------------------------------------------+ //| Подсчет ордеров потекущему символу | //+------------------------------------------------------------------+ int CounterOrderTradeType(ENUM_ORDER_TYPE order_type) { int cnt=0; //---- for(int pos=OrdersTotal()-1;pos>=0;pos--) { if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) continue; if(OrderSymbol()!=_Symbol) continue; if(order_type == OrderType() || order_type == -1) cnt++; } //---- return(cnt); } Tretyakov Rostyslav 2021.01.11 12:13 #13486 再做一些调整和更新 Порт-моне тв 2021.01.11 12:28 #13487 MakarFX: 我又对它进行了调整和更新 我不在家里,明天再测试。谢谢你。 Tretyakov Rostyslav 2021.01.11 12:33 #13488 Порт-моне тв:我不在家里,明天再测试。谢谢你。 联系 Platon75 2021.01.11 16:42 #13489 大家好。我有一个EA,在跨越趋势线和 某一颜色的水平线 时发出信号。我决定重做它,以便在趋势线和水平线跨越某种风格时发出信号。它起作用了。但我需要它在趋势线只越过光束时向右发出信号。我明白,我必须要加 透明度 但我不知道在哪里,也不知道怎么做。提前感谢。//+------------------------------------------------------------------+ //| TrendlineCrossAlert.mq5 | //| Copyright 2018, Strx | //| https://www.mql5.com/en/users/strx | //+------------------------------------------------------------------+ #define EAName "TrendlineCrossAlert" #define EAVersion "1.01" #property copyright "Copyright 2018, Strx" #property link "https://www.mql5.com/en/users/strx" #property version EAVersion #property description "Horizontal and Trendlines cross detection on any pair/timeframe" #property description "good for scalping on small timeframes (M1 to M15) and trend following on bigger ones." #property description "It send notifications when price crosses trendlines and horizontal lines" #property description "of specified color and when it happens, it change its color to CrossedColor input parameter" #property description "to be sure not to send multiple notifications for same line" #include <Arrays\ArrayString.mqh> #include <Trade\SymbolInfo.mqh> #include <ChartObjects\ChartObject.mqh> #include <ChartObjects\ChartObjectsLines.mqh> //--- External inputs sinput ENUM_LINE_STYLE MonitoringStyle = STYLE_SOLID; //MonitoringColor, EA only monitors this lines style sinput ENUM_LINE_STYLE CrossedStyle = STYLE_DASH; //CrossedColor, EA changes crossed lines style to this value sinput bool EnableAlerts = true; sinput bool EnableNotifications=true; sinput bool EnableEmails=false; //+------------------------------------------------------------------+ //| Trendlines and Horizontal lines crossing notification expert //+------------------------------------------------------------------+ class CTrendlineCrossAlertExpert { protected: CSymbolInfo m_symbol; // symbol info object //--- Logic vars CArrayString m_objectNames; public: CTrendlineCrossAlertExpert(void); ~CTrendlineCrossAlertExpert(void); bool Init(void); void Deinit(void); bool Processing(void); protected: //--- Inline functions string FormatPrice(double price){ return StringFormat("%."+(string)m_symbol.Digits()+"f",price); }; bool IsNewBar(){ return iVolume(NULL,0,0)==1; }; //--- Logic functions int FindActiveObjects(); bool ActiveObject(string objName); bool PriceCrossed(string objName); void NotifyCrossing(string objName); }; //--- global expert CTrendlineCrossAlertExpert ExtExpert; //+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ CTrendlineCrossAlertExpert::CTrendlineCrossAlertExpert(void){} //+------------------------------------------------------------------+ //| Destructor | //+------------------------------------------------------------------+ CTrendlineCrossAlertExpert::~CTrendlineCrossAlertExpert(void){} //+------------------------------------------------------------------+ //| Initialization and checking for input parameters | //+------------------------------------------------------------------+ bool CTrendlineCrossAlertExpert::Init(void) { //--- initialize common information m_symbol.Name(Symbol()); // symbol return(true); } //+------------------------------------------------------------------+ //| main function returns true if any position processed | //+------------------------------------------------------------------+ bool CTrendlineCrossAlertExpert::Processing(void) { bool rv=false; int i; string objName; if(m_symbol.RefreshRates()) { if(FindActiveObjects()) { for(i=0; i<m_objectNames.Total(); i++) { objName=m_objectNames[i]; if(PriceCrossed(objName)) { ObjectSetInteger(0,objName,OBJPROP_STYLE,CrossedStyle); NotifyCrossing(objName); } } } } Comment(EAName," v.",EAVersion," parameters: MonitoringStyle=",MonitoringStyle,", CrossedStyle=",CrossedStyle,", EnableAlerts=",EnableAlerts,", EnableNotifications=",EnableNotifications,", EnableEmails=",EnableEmails,"\n", "Monitoring ",m_objectNames.Total()," lines"); return(rv); } //+------------------------------------------------------------------+ //| Send Notifications function //+------------------------------------------------------------------+ void CTrendlineCrossAlertExpert::NotifyCrossing(string objName) { string msg="Price crossed line ''"+objName+"' on "+m_symbol.Name(); if(EnableAlerts) Alert(msg); if(EnableNotifications) SendNotification(msg); if(EnableEmails) SendMail(EAName+" Event",msg); Print(msg); } //+------------------------------------------------------------------+ //| Returns true if objName has been crossed up or down by current price //+------------------------------------------------------------------+ bool CTrendlineCrossAlertExpert::PriceCrossed(string objName) { ENUM_OBJECT objType; double objPrice=0.0,openPrice,curPrice; objType=(ENUM_OBJECT)ObjectGetInteger(0,objName,OBJPROP_TYPE); if(objType==OBJ_HLINE) { objPrice= ObjectGetDouble(0, objName, OBJPROP_PRICE); }else if(objType==OBJ_TREND){ objPrice=ObjectGetValueByTime(0,objName,TimeCurrent(),0); } if(objPrice) { openPrice= iOpen(NULL,0,0); curPrice = iClose(NULL,0,0); return (openPrice<=objPrice && curPrice>objPrice) || (openPrice>=objPrice && curPrice<objPrice); } return false; } //+------------------------------------------------------------------+ //| Returns true if object has to be monitored based on color and //| previous crosses //+------------------------------------------------------------------+ bool CTrendlineCrossAlertExpert::ActiveObject(string objName) { int objStyle=(int)ObjectGetInteger(0,objName,OBJPROP_STYLE,0); return objStyle == MonitoringStyle; } //+------------------------------------------------------------------+ //| Returns the list of object to be monitored //+------------------------------------------------------------------+ int CTrendlineCrossAlertExpert::FindActiveObjects() { m_objectNames.Clear(); int nHLines=ObjectsTotal(0,-1,OBJ_HLINE), nTrendLines=ObjectsTotal(0,-1,OBJ_TREND), i; string objName; for(i=0; i<nHLines; i++) { objName=ObjectName(0,i,0,OBJ_HLINE); if(ActiveObject(objName)) { m_objectNames.Add(objName); } } for(i=0; i<nTrendLines; i++) { objName=ObjectName(0,i,0,OBJ_TREND); if(ActiveObject(objName)) { m_objectNames.Add(objName); } } return m_objectNames.Total(); } //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit(void) { if(!ExtExpert.Init()) return(INIT_FAILED); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert new tick handling function | //+------------------------------------------------------------------+ void OnTick(void) { ExtExpert.Processing(); } //+------------------------------------------------------------------+ Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов www.mql5.com Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 Buba_rus 2021.01.11 17:43 #13490 下午好。 专家顾问应该检查条件并在出现新条形图时开立订单。 我得到的错误是" 只允许在全局、命名空间或类范围内进行函数 声明"。翻译成 "只允许在全局、命名空间或类的范围内进行函数声明"。 我还是不明白,我太笨了。请告诉我或告诉我在哪里可以读到。提前感谢)*** Документация по MQL5: Программы MQL5 / Ошибки выполнения www.mql5.com Ошибки выполнения - Программы MQL5 - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 1...134213431344134513461347134813491350135113521353135413551356...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你能不能把开仓交易的代码贴出来,我看看为什么不成功?
不
参数0表示属于此图
对不起,我对这个功能感到困惑
StringFind
你能不能把开仓交易的代码贴出来,我看看为什么不成功?
下面是粘贴你的函数
这里粘贴了你的特征
首先
OrderOfSymbol=CounterOrderTradeType(-1);
应该放在这里。
剩下的我来解决。下面是粘贴你的函数
尝试
我又对它进行了调整和更新
我不在家里,明天再测试。谢谢你。
我不在家里,明天再测试。谢谢你。
大家好。我有一个EA,在跨越趋势线和 某一颜色的水平线 时发出信号。我决定重做它,以便在趋势线和水平线跨越某种风格时发出信号。它起作用了。但我需要它在趋势线只越过光束时向右发出信号。我明白,我必须要加
透明度
下午好。
专家顾问应该检查条件并在出现新条形图时开立订单。
我得到的错误是" 只允许在全局、命名空间或类范围内进行函数 声明"。翻译成 "只允许在全局、命名空间或类的范围内进行函数声明"。
我还是不明白,我太笨了。请告诉我或告诉我在哪里可以读到。提前感谢)
***