新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 898 1...891892893894895896897898899900901902903904905...1953 新评论 Alekseu Fedotov 2019.06.26 13:36 #8971 ponochka :你好!帮我做以下事情:市场上每个未平仓头寸都需要做一个目标利润,但不是一般的,而是单独的!示例:EURUSD 开仓,其设置中的目标利润为 1 美元,一旦达到该位置,仓位就会自行关闭,只有它!所以每个货币对都应该独立运作,而不是根据总利润!我找到了所有货币对的总利润代码:帮我分别为每个货币对重做......提前谢谢你!如果你挖,你可以找到它。 //+----------------------------------------------------------------------------+ //| e-CloseByProfitPosInCurrency.mq4 | //| | //| Ким Игорь В. aka KimIV | //| http://www.kimiv.ru | //| | //| 22.04.2008 Советник закрывает только те позиции, у которых профит | //| в валюте депозита превысил некоторое заданное значение. | //+----------------------------------------------------------------------------+ #property copyright "Ким Игорь В. aka KimIV" #property link "http://www.kimiv.ru" //------- Внешние параметры советника -----------------------------------------+ string _P_Expert = "---------- Параметры советника" ; extern int NumberAccount = 0 ; // Номер торгового счёта extern string symbol = "" ; // Торговый инструмент // "" - любой // "0" - текущий extern int Operation = - 1 ; // Торговая операция: // -1 - любая // 0 - OP_BUY // 1 - OP_SELL extern double Profit = 50 ; // Профит в валюте депозита extern int MagicNumber = 0 ; // MagicNumber extern bool ShowComment = True; // Показывать комментарий //------- Глобальные переменные советника -------------------------------------+ bool gbNoInit = False; // Флаг неудачной инициализации int Slippage = 3 ; // Проскальзывание цены int NumberOfTry = 5 ; // Количество торговых попыток bool UseSound = True; // Использовать звуковой сигнал string NameFileSound = "expert.wav" ; // Наименование звукового файла color clCloseBuy = Blue; // Цвет значка закрытия покупки color clCloseSell = Red; // Цвет значка закрытия продажи //------- Подключение внешних модулей -----------------------------------------+ #include <stdlib.mqh> // Стандартная библиотека //+----------------------------------------------------------------------------+ //| | //| ПРЕДОПРЕДЕЛЁННЫЕ ФУНКЦИИ | //| | //+----------------------------------------------------------------------------+ //| expert initialization function | //+----------------------------------------------------------------------------+ void init() { gbNoInit = False; if (!IsTradeAllowed()) { Message( "Для нормальной работы советника необходимо\n" + "Разрешить советнику торговать" ); gbNoInit=True; return ; } if (!IsLibrariesAllowed()) { Message( "Для нормальной работы советника необходимо\n" + "Разрешить импорт из внешних экспертов" ); gbNoInit=True; return ; } if (Operation<- 1 || Operation> 1 ) { Message( "Недопустимое значение внешнего параметра Operation" ); gbNoInit=True; return ; } if (symbol!= "0" && symbol!= "" ) { if (MarketInfo(StringUpper(symbol), MODE_BID)== 0 ) { Message( "В обзоре рынка отсутствует символ " +symbol); gbNoInit=True; return ; } } if (!IsTesting()) { if (IsExpertEnabled()) Message( "Советник будет запущен следующим тиком" ); else Message( "Отжата кнопка \"Разрешить запуск советников\"" ); } } //+----------------------------------------------------------------------------+ //| expert deinitialization function | //+----------------------------------------------------------------------------+ void deinit() { if (!IsTesting()) Comment ( "" ); } //+----------------------------------------------------------------------------+ //| expert start function | //+----------------------------------------------------------------------------+ void start() { if (gbNoInit) { Comment ( "Не удалось инициализировать советник!" ); return ; } if (!IsTesting()) { if (NumberAccount> 0 && NumberAccount!=AccountNumber()) { Comment ( "Работа на счёте: " +AccountNumber()+ " ЗАПРЕЩЕНА!" ); return ; } else Comment ( "" ); if (ShowComment) { string st= "NumberAccount=" +DoubleToStr(NumberAccount, 0 ) + " Symbol=" +IIFs(symbol== "0" , "All" , IIFs(symbol== "" , Symbol (), StringUpper(symbol))) + " Operation=" +IIFs(Operation< 0 , "All" , GetNameOP(Operation)) + " Profit=" +DoubleToStr(Profit, 2 )+ " " +AccountCurrency() + " MagicNumber=" +DoubleToStr(MagicNumber, 0 ) +IIFs(ShowComment, " ShowComment" , "" ) ; Comment (st); } else Comment ( "" ); } ClosePosBySizeProfitInCurrency(StringUpper(symbol), Operation, MagicNumber, Profit); } //+----------------------------------------------------------------------------+ //| | //| ПОЛЬЗОВАТЕЛЬСКИЕ ФУНКЦИИ | //| | //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание: Закрытие одной предварительно выбранной позиции | //+----------------------------------------------------------------------------+ void ClosePosBySelect() { bool fc; color clClose; double ll, pa, pb, pp; int err, it; if (OrderType()==OP_BUY || OrderType()==OP_SELL) { for (it= 1 ; it<=NumberOfTry; it++) { if (!IsTesting() && (!IsExpertEnabled() || IsStopped ())) break ; while (!IsTradeAllowed()) Sleep ( 5000 ); RefreshRates(); pa=MarketInfo(OrderSymbol(), MODE_ASK); pb=MarketInfo(OrderSymbol(), MODE_BID); if (OrderType()==OP_BUY) { pp=pb; clClose=clCloseBuy; } else { pp=pa; clClose=clCloseSell; } ll=OrderLots(); fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose); if (fc) { if (UseSound) PlaySound (NameFileSound); break ; } else { err= GetLastError (); if (err== 146 ) while (IsTradeContextBusy()) Sleep ( 1000 * 11 ); Print ( "Error(" ,err, ") Close " ,GetNameOP(OrderType()), " " , ErrorDescription(err), ", try " ,it); Print (OrderTicket(), " Ask=" ,pa, " Bid=" ,pb, " pp=" ,pp); Print ( "sy=" ,OrderSymbol(), " ll=" ,ll, " sl=" ,OrderStopLoss(), " tp=" ,OrderTakeProfit(), " mn=" ,OrderMagicNumber()); Sleep ( 1000 * 5 ); } } } else Print ( "Некорректная торговая операция. Close " ,GetNameOP(OrderType())); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Закрытие тех позиций, у которых профит в валюте депозита | //| превысил некоторое значение | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //| pr - профит | //+----------------------------------------------------------------------------+ void ClosePosBySizeProfitInCurrency( string sy= "" , int op=- 1 , int mn=- 1 , double pr= 0 ) { int i, k= OrdersTotal (); if (sy== "0" ) sy= Symbol (); for (i=k- 1 ; i>= 0 ; i--) { if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (mn< 0 || OrderMagicNumber()==mn) { if (OrderProfit()+OrderSwap()>pr) ClosePosBySelect(); } } } } } } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 01.09.2005 | //| Описание : Возвращает наименование торговой операции | //+----------------------------------------------------------------------------+ //| Параметры: | //| op - идентификатор торговой операции | //+----------------------------------------------------------------------------+ string GetNameOP( int op) { switch (op) { case OP_BUY : return ( "Buy" ); case OP_SELL : return ( "Sell" ); case OP_BUYLIMIT : return ( "Buy Limit" ); case OP_SELLLIMIT: return ( "Sell Limit" ); case OP_BUYSTOP : return ( "Buy Stop" ); case OP_SELLSTOP : return ( "Sell Stop" ); default : return ( "Unknown Operation" ); } } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 01.02.2008 | //| Описание : Возвращает одно из двух значений взависимости от условия. | //+----------------------------------------------------------------------------+ string IIFs( bool condition, string ifTrue, string ifFalse) { if (condition) return (ifTrue); else return (ifFalse); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 01.09.2005 | //| Описание : Вывод сообщения в коммент и в журнал | //+----------------------------------------------------------------------------+ //| Параметры: | //| m - текст сообщения | //+----------------------------------------------------------------------------+ void Message( string m) { Comment (m); if ( StringLen (m)> 0 ) Print (m); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 01.09.2005 | //| Описание : Возвращает строку в ВЕРХНЕМ регистре | //+----------------------------------------------------------------------------+ string StringUpper( string s) { int c, i, k= StringLen (s), n; for (i= 0 ; i<k; i++) { n= 0 ; c=StringGetChar(s, i); if (c> 96 && c< 123 ) n=c- 32 ; // a-z -> A-Z if (c> 223 && c< 256 ) n=c- 32 ; // а-я -> А-Я if (c== 184 ) n= 168 ; // ё -> Ё if (n> 0 ) s=StringSetChar(s, i, n); } return (s); } //+----------------------------------------------------------------------------+ novichok2018 2019.06.26 16:04 #8972 你好。谁能向一个没有经验的人解释一下,为什么函数 doubleiOpen( stringsymbol,// 符号 intTimeframe,// period intshift// shift )。 如果我按照手册上说的,插入一个工具的符号名称,(不是0,也不是NULL),然后在图表上的测试器中运行,我得到的答案是0.0?同时,0和NULL给出了正确的值。 谢谢。 novichok2018 2019.06.26 16:11 #8973 novichok2018: 你好。谁能向一个没有经验的人解释一下,为什么函数 doubleiOpen(字符串,// 符号inttimeframe,// periodintshift// shift); 如果我按照手册上说的插入一个象征性的工具名称,(不是0,也不是NULL)并在图表上的测试器中运行,我得到的响应是0.0?同时,0和NULL给出了正确的值。 谢谢。 哎呀,对不起,大意了:我只是在仪器名称中漏了一个字母。这没关系--语言学家就是语言学家。 novichok2018 2019.06.26 16:33 #8974 novichok2018: 哎呀,对不起,我没注意:我只是漏掉了乐器名称中的一个字母。这没关系--语言学家就是语言学家。 现在我有另一个问题:为什么在另一个工具(不是DowJones30)上启动的double DJop1 = iOpen("DowJones30",PERIOD_H1,1)产生正确的值,而double DJbid = MarketInfo("DowJones30",MODE_BID)产生0.0,尽管它在DowJones30上运行良好? nalyk 2019.06.26 22:07 #8975 Alekseu Fedotov: 谢谢你,这不清楚,现在的位置是加号,但说的是0.25。 void OnTick() { //--- double drawdown=AccountProfit()*100/AccountBalance(); Comment("текущая просадка = ",drawdown); } 附加的文件: htygj.jpg 421 kb Alekseu Fedotov 2019.06.27 03:12 #8976 nalyk: 谢谢你,这不清楚,现在的位置是正的,但它说的是0.25。 这是正确的,计算一下吧。 Seric29 2019.06.27 09:54 #8977 谁能帮助解决这个问题https://www.mql5.com/ru/forum/160683/page897#comment_12221175? Igor Makanu 2019.06.27 10:21 #8978 Seric29: 谁能帮助解决这个问题https://www.mql5.com/ru/forum/160683/page897#comment_12221175? #property strict template<typename T>struct A { T val; int ind; }; A<double> MyStructDouble; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { MyStructDouble.val = 123.456; MyStructDouble.ind = 123; return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { Print("MyStructDouble.val = ",MyStructDouble.val," , MyStructDouble.ind = ",MyStructDouble.ind); } //+------------------------------------------------------------------+ 2019.06.27 14:20:36.265 test EURUSD,H1: MyStructDouble.val = 123.456 , MyStructDouble.ind = 123 2019.06.27 14:20:35.700 test EURUSD,H1: MyStructDouble.val = 123.456 , MyStructDouble.ind = 123 2019.06.27 14:20:35.427 test EURUSD,H1: MyStructDouble.val = 123.456 , MyStructDouble.ind = 123 2019.06.27 14:20:34.758 test EURUSD,H1: Initialized Seric29 2019.06.27 13:13 #8979 Igor Makanu: 也就是说,尽管应用了模板,你仍然需要为其分配类型 A<double> MyStructDouble; 而对于类,这段代码会是什么样子,将模板应用于一个类。 Igor Makanu 2019.06.27 14:18 #8980 Seric29: 也就是说,尽管应用了模板,你仍然需要为其分配类型 而对于类来说,这段代码会是什么样子呢,把模板应用到一个类上。 C++是基于MQL的,所有类似C的语言都是严格类型化的--google来帮助。 和我的例子一模一样,用类代替结构 1...891892893894895896897898899900901902903904905...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你好!帮我做以下事情:
市场上每个未平仓头寸都需要做一个目标利润,但不是一般的,而是单独的!
示例:EURUSD 开仓,其设置中的目标利润为 1 美元,一旦达到该位置,仓位就会自行关闭,只有它!
所以每个货币对都应该独立运作,而不是根据总利润!
我找到了所有货币对的总利润代码:
帮我分别为每个货币对重做......提前谢谢你!
如果你挖,你可以找到它。
doubleiOpen(
stringsymbol,// 符号
intTimeframe,// period
intshift// shift
)。
如果我按照手册上说的,插入一个工具的符号名称,(不是0,也不是NULL),然后在图表上的测试器中运行,我得到的答案是0.0?同时,0和NULL给出了正确的值。 谢谢。
你好。谁能向一个没有经验的人解释一下,为什么函数
doubleiOpen(
字符串,// 符号
inttimeframe,// period
intshift// shift
);
如果我按照手册上说的插入一个象征性的工具名称,(不是0,也不是NULL)并在图表上的测试器中运行,我得到的响应是0.0?同时,0和NULL给出了正确的值。 谢谢。
哎呀,对不起,大意了:我只是在仪器名称中漏了一个字母。这没关系--语言学家就是语言学家。
哎呀,对不起,我没注意:我只是漏掉了乐器名称中的一个字母。这没关系--语言学家就是语言学家。
现在我有另一个问题:为什么在另一个工具(不是DowJones30)上启动的double DJop1 = iOpen("DowJones30",PERIOD_H1,1)产生正确的值,而double DJbid = MarketInfo("DowJones30",MODE_BID)产生0.0,尽管它在DowJones30上运行良好?
谢谢你,这不清楚,现在的位置是加号,但说的是0.25。
谢谢你,这不清楚,现在的位置是正的,但它说的是0.25。
这是正确的,计算一下吧。
谁能帮助解决这个问题https://www.mql5.com/ru/forum/160683/page897#comment_12221175?
谁能帮助解决这个问题https://www.mql5.com/ru/forum/160683/page897#comment_12221175?
2019.06.27 14:20:36.265 test EURUSD,H1: MyStructDouble.val = 123.456 , MyStructDouble.ind = 123
2019.06.27 14:20:35.700 test EURUSD,H1: MyStructDouble.val = 123.456 , MyStructDouble.ind = 123
2019.06.27 14:20:35.427 test EURUSD,H1: MyStructDouble.val = 123.456 , MyStructDouble.ind = 123
2019.06.27 14:20:34.758 test EURUSD,H1: Initialized
也就是说,尽管应用了模板,你仍然需要为其分配类型
A<double> MyStructDouble;
而对于类,这段代码会是什么样子,将模板应用于一个类。
也就是说,尽管应用了模板,你仍然需要为其分配类型
而对于类来说,这段代码会是什么样子呢,把模板应用到一个类上。
C++是基于MQL的,所有类似C的语言都是严格类型化的--google来帮助。
和我的例子一模一样,用类代替结构