新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1838 1...183118321833183418351836183718381839184018411842184318441845...1953 新评论 законопослушный гражданин 2021.12.31 14:28 #18371 Tretyakov Rostyslav #: // Параметры советника input string sParametersEA = ""; // Параметры советника input double Lot = 0.01; // Количество лотов input double Lotcontrol = 0.08; // ----- input int StopLoss = 30; // Стоп (SL) input int TakeProfit = 30; // Тейк (TP) input int HourPause = 1; // Пауза в часах input int Slippage = 3; // Проскальзование (в пунктах) input int Magic = 1; // Индентификатор советника input double K_Martin1 = 0.01; // Множитель мартин 1 input double K_Martin2 = 1.9; // Множитель мартин 2 input double K_Martin3 = 1.4; // Множитель мартин 3 input int OrdersClose = 3; // Ограничение лотности мартин1 input int OrdersClose2 = 5; // Ограничение лотности мартин2 input int DigitsLot = 2; // Точность лотности // Параметры индикатора input string sParametersMA = ""; // Параметры индикатора input int PeriodMA = 14; // Период мувинга input int MovingShift = 1; // Сдвиг мувинга // Глобальные переменные datetime Start=0,newbar; double dMA; double MaxMartinLot; double MaxMartinLot2; //+-----------------------------------------------------------------------------------------------+ int OnInit() { Start = TimeCurrent(); MaxMartinLot = Lot*MathPow(1.4,OrdersClose); MaxMartinLot2 = Lot*MathPow(K_Martin2,OrdersClose2); int Y = 15; DrawLABEL("nextlot",1,5,Y,clrLime,""); Y += 20; DrawLABEL("currentlot",1,5,Y,clrLime,""); Y += 30; return(INIT_SUCCEEDED); } //+-----------------------------------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+-----------------------------------------------------------------------------------------------+ void OnTick() { // Получим значение индикатора dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0. // выключаем торговлю if (OrderLots()>=Lotcontrol) { Start=TimeCurrent()+(HourPause*60*60); } // Если нет открытых ордеров, то входим в условие if((CountOrders()==0)&& Start<=TimeCurrent()) { // Если появился сигнал на покупку, то откроем ордер на покупку if(bSignalBuy() == true) vOrderOpenBuy(); // Если появился сигнал на продажу, то откроем ордер на продажу if(bSignalSell() == true) vOrderOpenSell(); } // Пишем какой лот текущий и какой следующий DrawLABEL("nextlot",1,5,0,Color1(),StringConcatenate("CURRENT LOT: ",DoubleToStr(LOT(),2))); DrawLABEL("currentlot",1,5,0,Color2(),StringConcatenate("NEXT LOT: ",DoubleToStr(LOT(),2))); } 似乎已经组装好了,但它只在测试器中工作了一次。 如果我再做一次测试,它不会打开任何交易 当我进行第一次测试时,间隔被设定,但如果将手数重置为起始手数,它就不会再开出任何交易。 我哪里做错了? Alekseu Fedotov 2021.12.31 14:51 #18372 законопослушный гражданин #:似乎已经组装好了,但它只在测试器中工作了一次。如果我再做一次测试,它不会打开任何交易当我进行第一次测试时,间隔被设定,但如果将手数重置为起始手数,它就不会再开出任何交易。我在哪里犯了错误? 在点击功能和阅读之前多按f1。 该订单必须使用OrderSelect()函数进行预选。 这是给OrderLots()函数的。 抱歉喝醉了。 新年快乐! Alekseu Fedotov 2021.12.31 14:56 #18373 законопослушный гражданин #:似乎已经组装好了,但它只在测试器中工作了一次。如果我再做一次测试,它不会打开任何交易当我进行第一次测试时,间隔被设定,但如果将手数重置为起始手数,它就不会再开出任何交易。我哪里做错了? 介绍人 试试这个功能。 //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает сумму лотов открытых позиций | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ double GetAmountLotFromOpenPos(string sy="",int op=-1,int mn=-1) { double l=0; int i,k=OrdersTotal(); if(sy=="0") sy=Symbol(); for(i=0; i<k; i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==sy || sy=="") { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { if(op<0 || OrderType()==op) { if(mn<0 || OrderMagicNumber()==mn) { l+=OrderLots(); } } } } } } return(l); } законопослушный гражданин 2021.12.31 15:04 #18374 Alekseu Fedotov #:礼物试试这个功能。 谢谢你!)节日快乐) Vladimir Simakov 2021.12.31 15:21 #18375 Andrey Sokolov #:是的,我把它做得尽可能简单,把它插入应用程序,它就能工作。 你在TestLib上下文的mql5中调用它?它应该是TestLib::TestClass::Inc() Alekseu Fedotov 2021.12.31 15:35 #18376 законопослушный гражданин #:谢谢你!)新年快乐!)。 任何时候都可以! Andrei Sokolov 2021.12.31 17:35 #18377 законопослушный гражданин #:我想我已经得到了它,但它只在测试器中工作了一次我哪里做错了? 调试器是解决这类问题的好帮手。我建议使用它 Andrei Sokolov 2021.12.31 17:35 #18378 Vladimir Simakov #: 你在TestLib上下文的mql5中调用它?它应该是TestLib::TestClass::Inc() 谢谢你 Tretyakov Rostyslav 2022.01.01 08:32 #18379 законопослушный гражданин #:似乎已经组装好了,但它只在测试器中工作了一次。 我哪里做错了? // Параметры советника input string sParametersEA = ""; // Параметры советника input double Lot = 0.01; // Количество лотов input double Lotcontrol = 0.08; // ----- input int StopLoss = 30; // Стоп (SL) input int TakeProfit = 30; // Тейк (TP) input int HourPause = 1; // Пауза в часах input int Slippage = 3; // Проскальзование (в пунктах) input int Magic = 1; // Индентификатор советника input double K_Martin1 = 0.01; // Множитель мартин 1 input double K_Martin2 = 1.9; // Множитель мартин 2 input double K_Martin3 = 1.4; // Множитель мартин 3 input int OrdersClose = 3; // Ограничение лотности мартин1 input int OrdersClose2 = 5; // Ограничение лотности мартин2 input int DigitsLot = 2; // Точность лотности // Параметры индикатора input string sParametersMA = ""; // Параметры индикатора input int PeriodMA = 14; // Период мувинга input int MovingShift = 1; // Сдвиг мувинга // Глобальные переменные datetime Start=0,newbar; double dMA; double MaxMartinLot; double MaxMartinLot2; //+-----------------------------------------------------------------------------------------------+ int OnInit() { Start = TimeCurrent(); MaxMartinLot = Lot*MathPow(1.4,OrdersClose); MaxMartinLot2 = Lot*MathPow(K_Martin2,OrdersClose2); int Y = 15; DrawLABEL("nextlot",1,5,Y,clrLime,""); Y += 20; DrawLABEL("currentlot",1,5,Y,clrLime,""); Y += 30; return(INIT_SUCCEEDED); } //+-----------------------------------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+-----------------------------------------------------------------------------------------------+ void OnTick() { // Получим значение индикатора dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0. // выключаем торговлю if (GetInfoLastPos(1)>=Lotcontrol) { Start=GetInfoLastPos(3)+(HourPause*60*60); } // Если нет открытых ордеров, то входим в условие if((CountOrders()==0)&& Start<=TimeCurrent()) { // Если появился сигнал на покупку, то откроем ордер на покупку if(bSignalBuy() == true) vOrderOpenBuy(); // Если появился сигнал на продажу, то откроем ордер на продажу if(bSignalSell() == true) vOrderOpenSell(); } // Пишем какой лот текущий и какой следующий DrawLABEL("nextlot",1,5,0,Color1(),StringConcatenate("CURRENT LOT: ",DoubleToStr(LOT(),2))); DrawLABEL("currentlot",1,5,0,Color2(),StringConcatenate("NEXT LOT: ",DoubleToStr(LOT(),2))); } //+----------------------------------------------------------------------------+ //| Функция возвращает по символу и магику | //| 1 - размер лота последней закрытой позиции | //| 2 - размер профита с учетом комиссии и свопа последней закрытой позиции | //| 3 - время последней закрытой позиции | //+----------------------------------------------------------------------------+ double GetInfoLastPos(int a=1) { datetime t=0; double result=0,l=0,p=0,f=0; int i=OrdersHistoryTotal()-1; for(int pos=i;pos>=0;pos--) { if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY)) { if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { if(t<OrderCloseTime()) {t=OrderCloseTime(); l=OrderLots(); p=OrderProfit()+OrderCommission()+OrderSwap();} } } } } if(a==1) {result=l;} else if(a==2) {result=p;} else if(a==3) {result=(double)t;} else {result=0;} return(result); } законопослушный гражданин 2022.01.01 12:24 #18380 Tretyakov Rostyslav #: 谢谢你。 而我用一个void来获取InfoLastPos().... 1...183118321833183418351836183718381839184018411842184318441845...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
似乎已经组装好了,但它只在测试器中工作了一次。
如果我再做一次测试,它不会打开任何交易
当我进行第一次测试时,间隔被设定,但如果将手数重置为起始手数,它就不会再开出任何交易。
我哪里做错了?
似乎已经组装好了,但它只在测试器中工作了一次。
如果我再做一次测试,它不会打开任何交易
当我进行第一次测试时,间隔被设定,但如果将手数重置为起始手数,它就不会再开出任何交易。
我在哪里犯了错误?
在点击功能和阅读之前多按f1。
该订单必须使用OrderSelect()函数进行预选。
这是给OrderLots()函数的。
抱歉喝醉了。
新年快乐!
似乎已经组装好了,但它只在测试器中工作了一次。
如果我再做一次测试,它不会打开任何交易
当我进行第一次测试时,间隔被设定,但如果将手数重置为起始手数,它就不会再开出任何交易。
我哪里做错了?
介绍人
试试这个功能。
礼物
试试这个功能。
谢谢你!)节日快乐)
是的,我把它做得尽可能简单,把它插入应用程序,它就能工作。
谢谢你!)新年快乐!)。
任何时候都可以!
我想我已经得到了它,但它只在测试器中工作了一次
我哪里做错了?
调试器是解决这类问题的好帮手。我建议使用它
你在TestLib上下文的mql5中调用它?它应该是TestLib::TestClass::Inc()
谢谢你
似乎已经组装好了,但它只在测试器中工作了一次。
我哪里做错了?谢谢你。
而我用一个void来获取InfoLastPos()....