新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 706 1...699700701702703704705706707708709710711712713...1953 新评论 multiplicator 2018.12.01 02:14 #7051 终端会简单地丢弃所有多余的字符。 如果你用这卷书打开。0.029它将打开0.02手 以及如果它以该卷打开。 NormalizeDouble(0.029,2) 它将打开0.03手。 multiplicator 2018.12.01 03:21 #7052 multiplicator:如何计算小数点 后的数字? 例如,我发现最小手数是0.01。 我如何推断出小数点后 的数字是2? 将订单量规范化到小数点后两位数。 这里是暗号。void OnStart() { double minlot=MarketInfo(Symbol(),MODE_MINLOT); Alert(d(minlot)); } int d(double x) { int n; for(n=0;n<8;n++) { if(x==NormalizeDouble(x,n)) { return(n); } } return(n-1); } Igor Makanu 2018.12.01 05:19 #7053 multiplicator: 终端只是简单地丢弃所有多余的标志。 如果我们以这一卷为开篇。它将打开0.02手。 而如果你用该卷打开。 它将打开0.03手。如果你需要开0.25手怎么办? 这里有现成的工作功能,阅读并使用它们。 https://www.mql5.com/ru/forum/131859/page8#comment_3359730 乘法器。 例如,我们把数值放在函数中:7手。该经纪人的最小手数为5,手数增量为2。 这是我的lot normalization f函数,我已经用了很久了,还没有人抱怨过。 在这里你可以找出lot increment,然后四舍五入到lot increment的位数。 //_______________________________________________________________________ //Нормализация объема лота для ордера up=true - в большую сторону, иначе в меньшую //_______________________________________________________________________ double NormalizeLot(double value, bool up=false){ double res,sizetable[9] = {1.0, 0.1, 0.01, 0.001, 0.0001, 0.00001, 0.000001, 0.0000001, 0.00000001}; double lotStep = MarketInfo(Symbol(),MODE_LOTSTEP); int lotdigits; for (lotdigits=8; lotdigits>=0 ; lotdigits--) if (lotStep <= sizetable[lotdigits]) break; if(up) res = NormalizeDouble(MathCeil(MathMin(MathMax(value, MarketInfo(Symbol(),MODE_MINLOT)), MarketInfo(Symbol(),MODE_MAXLOT))/lotStep)*lotStep,lotdigits); else res = NormalizeDouble(MathFloor(MathMin(MathMax(value, MarketInfo(Symbol(),MODE_MINLOT)), MarketInfo(Symbol(),MODE_MAXLOT))/lotStep)*lotStep,lotdigits); return(res);} //_______________________________________________________________________ 好吧,如果你找到一个服务器,有一个手数步骤,例如,0.37,那么只有在循环中添加和比较所需的手数,但没有这样的服务器,似乎有非标准手数的比特币,不从事,我不知道,你需要一个具体的情况 Только "Полезные функции от KimIV". 2011.02.18www.mql5.com Все функции взяты из этой ветки - http://forum.mql4... tr2de 2018.12.01 13:09 #7054 日安,亲爱的同事们,请帮助我正确拼写我的EA中的条件,以便在二元期权的SHI_silvertrend_signal指标信号上进入交易,只有OP_SELL和OP_BUY。为M1和M5。信号在前一根蜡烛的收盘时出现。 - 在指标发出信号的时候,只在信号发出后的第一根蜡烛上开立订单 - 从收到信号的那一刻起,不超过5秒。 - 可接受的价格变化在滑移范围内 (该指标有2个缓冲区) 从指标注释//两个缓冲区都要填上零。否则在改变时间框架时就会出现垃圾。 提前感谢您的帮助和支持! void OnTick() { ..... if((CountSell() + CountBuy())== 0 && isTradeHours()) { SignalBuy = iCustom(NULL, 0, "SST", AllBars, Otstup, Per, 0,0); //получаемое значение в формате 4546546549.0 SignalSell = iCustom(NULL, 0, "SST", AllBars, Otstup, Per, 1,0); if((Ask <= SignalBuy - Slippage*Point || Ask <= SignalBuy + Slippage*Point) && iBarShift(NULL, 0,TimeSeconds(TimeCurrent()))) //<---- помогите дописать условие { if(OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0,IntegerToString(Expiration), Magic, 0, Blue) > 0) { Print("Ордер на покупку открыт!"); return; }else Print("Ошибка открытия ордера на покупку!"); } if((Bid >= SignalSell - Slippage*Point || Bid >= SignalSell + Slippage*Point) && iBarShift(NULL, 0,TimeSeconds(TimeCurrent()))) //<---- помогите дописать условие { if(OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0,IntegerToString(Expiration), Magic, 0, Red) > 0) { Print("Ордер на продажу открыт!"); return; }else Print("Ошибка открытия ордера на продажу!"); } } } ....... 指标本身的代码(在互联网上找到,如果公布代码不违反论坛规则?) //+------------------------------------------------------------------+ //| SHI_SilverTrendSig.mq4 | //| Copyright © 2003, VIAC.RU, OlegVS, GOODMAN, © 2005, Shurka | //| shforex@narod.ru | //| | //| | //| Пишу программы на заказ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, Shurka" #property link "http://shforex.narod.ru" #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Red #property indicator_color2 Blue #define SH_BUY 1 #define SH_SELL -1 //---- Входные параметры extern int AllBars=0;//Для скольки баров считать. 0 - для всех. extern int Otstup=30;//Отступ. extern int Per=9;//Период. int SH,NB,i,UD; double R,SHMax,SHMin; double BufD[]; double BufU[]; //+------------------------------------------------------------------+ //| Функция инициализации | //+------------------------------------------------------------------+ int init() { //В NB записываем количество баров для которых считаем индикатор if (Bars<AllBars+Per || AllBars==0) NB=Bars-Per; else NB=AllBars; IndicatorBuffers(2); IndicatorShortName("SST"); SetIndexStyle(0,DRAW_ARROW,0,1); SetIndexStyle(1,DRAW_ARROW,0,1); SetIndexArrow(0,159); SetIndexArrow(1,159); SetIndexBuffer(0,BufU); SetIndexBuffer(1,BufD); SetIndexDrawBegin(0,Bars-NB);//Индикатор будет отображаться только для NB баров SetIndexDrawBegin(1,Bars-NB); ArrayInitialize(BufD,0.0);//Забьём оба буфера ноликами. Иначе будет мусор при смене таймфрейма. ArrayInitialize(BufU,0.0); return(0); } //+------------------------------------------------------------------+ //| Функция деинициализации | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| Собсна индикатор | //+------------------------------------------------------------------+ int start() { int CB=IndicatorCounted(); /* Тут вот та самая оптимизационная фишка. В язык введена функция, которая возвращает количество посчитанных баров, причём очень хитро. При первом вызове индикатора это 0, всё понятно, ещё ничего не считалось, а затем выдаёт количество обсчитанных баров минус один. Т.е. если всего баров 100, то функция вернёт 99. Я ввёл такой код, выше у меня определялась NB - кол-во баров подлежащих обсчёту. В принципе этот параметр можно и выкинуть, однако для тех кто в танке (I80286) можно и оставить. Так вот, здесь, при первом вызове NB остаётся прежней, а при последующих уменьшается до последнего бара, т.е. 1 или 2, ну или сколько там осталось посчитать*/ if(CB<0) return(-1); else if(NB>Bars-CB) NB=Bars-CB; for (SH=1;SH<NB;SH++)//Прочёсываем график от 1 до NB { for (R=0,i=SH;i<SH+10;i++) {R+=(10+SH-i)*(High[i]-Low[i]);} R/=55; SHMax = High[Highest(NULL,0,MODE_HIGH,Per,SH)]; SHMin = Low[Lowest(NULL,0,MODE_LOW,Per,SH)]; if (Close[SH]<SHMin+(SHMax-SHMin)*Otstup/100 && UD!=SH_SELL) { BufD[SH]=High[SH]+R*0.5; UD=SH_SELL; } if (Close[SH]>SHMax-(SHMax-SHMin)*Otstup/100 && UD!=SH_BUY) { BufU[SH]=Low[SH]-R*0.5; UD=SH_BUY; } } return(0); } multiplicator 2018.12.01 16:03 #7055 Igor Makanu: res = NormalizeDouble(MathFloor(MathMin(MathMax(value, MarketInfo(Symbol(),MODE_MINLOT)), MarketInfo(Symbol(),MODE_MAXLOT))/lotStep)*lotStep,lotdigits); (真是一个转折。matmax,然后是matmin。) Roman Shiredchenko 2018.12.01 16:40 #7056 优化键在哪里丢失? 如何优化? Alexander Boltunov 2018.12.01 16:46 #7057 请告知如何正确指定在指标信号上进入交易的条件。 我 为Renko图表写了一个简单的专家顾问,看起来像这样。 extern double LotSize = 0.01; extern int Magic = 1; int prevtime = 0; int start() { //При образовании нового кубика ренко проверка на Buy или Sell и заключение ордера if (prevtime != Time[0]) { if (Close[1] > Open[1]) { OrderSend(Symbol(), OP_BUY, LotSize, ND(Ask), 3, 0, 0, "RG", Magic, 0, Blue); } if (Close[1] < Open[1]) { OrderSend(Symbol(), OP_SELL, LotSize, ND(Bid), 3, 0, 0, "RG", Magic, 0, Red); } Magic++; prevtime = Time[0]; } return(0); } double ND(double np) { return(NormalizeDouble(np,Digits)); } 我对离线图表不是很满意,决定将其与AG_Renko_Chart指标相结合。我把它附在我的信息中。 但这里是如何返回右边缘的renko值的函数。 iCustom(_Symbol,TF,"AG_Renko_Chart",Step,false,false,Revers,0,0); 我搞不清楚如何区分下行或上行的条形图...以及如何正确地规定一个不会使大量交易的功能......。 总的来说,我的脑子里没有任何想法。请帮助!!!! 附加的文件: AG_Renko_Chart.ex4 17 kb AG_Renko_Chart.mq4 8 kb Alexey Viktorov 2018.12.01 17:16 #7058 Roman Shiredchenko:优化键在哪里丢失? 如何优化? 这是一个笑话还是一个社会笑话? Roman Shiredchenko 2018.12.01 17:24 #7059 Alexey Viktorov:这是一个笑话,还是你在取笑社会? 这不是一个笑话,我不是这样嘲弄社会的。 在你发表异端邪说之前,好好看看图片吧。 ilvic 2018.12.01 17:52 #7060 Roman Shiredchenko:这不是一个笑话,我不是这样嘲弄的。 在你发表异端言论之前,请仔细看一下图片。 问题在于屏幕分辨率。 1...699700701702703704705706707708709710711712713...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果你用这卷书打开。
0.029
它将打开0.02手
它将打开0.03手。以及如果它以该卷打开。
如何计算小数点 后的数字?
例如,我发现最小手数是0.01。
我如何推断出小数点后 的数字是2?
将订单量规范化到小数点后两位数。
终端只是简单地丢弃所有多余的标志。
如果我们以这一卷为开篇。
它将打开0.02手。
它将打开0.03手。而如果你用该卷打开。
如果你需要开0.25手怎么办? 这里有现成的工作功能,阅读并使用它们。
https://www.mql5.com/ru/forum/131859/page8#comment_3359730
乘法器。
例如,我们把数值放在函数中:7手。
该经纪人的最小手数为5,手数增量为2。
这是我的lot normalization f函数,我已经用了很久了,还没有人抱怨过。 在这里你可以找出lot increment,然后四舍五入到lot increment的位数。
好吧,如果你找到一个服务器,有一个手数步骤,例如,0.37,那么只有在循环中添加和比较所需的手数,但没有这样的服务器,似乎有非标准手数的比特币,不从事,我不知道,你需要一个具体的情况日安,亲爱的同事们,请帮助我正确拼写我的EA中的条件,以便在二元期权的SHI_silvertrend_signal指标信号上进入交易,只有OP_SELL和OP_BUY。为M1和M5。信号在前一根蜡烛的收盘时出现。
- 在指标发出信号的时候,只在信号发出后的第一根蜡烛上开立订单
- 从收到信号的那一刻起,不超过5秒。
- 可接受的价格变化在滑移范围内
(该指标有2个缓冲区)
从指标注释//两个缓冲区都要填上零。否则在改变时间框架时就会出现垃圾。
提前感谢您的帮助和支持!
指标本身的代码(在互联网上找到,如果公布代码不违反论坛规则?)
Igor Makanu:
(真是一个转折。matmax,然后是matmin。)
优化键在哪里丢失?
如何优化?
请告知如何正确指定在指标信号上进入交易的条件。
我 为Renko图表写了一个简单的专家顾问,看起来像这样。
我对离线图表不是很满意,决定将其与AG_Renko_Chart指标相结合。我把它附在我的信息中。
但这里是如何返回右边缘的renko值的函数。
我搞不清楚如何区分下行或上行的条形图...以及如何正确地规定一个不会使大量交易的功能......。
总的来说,我的脑子里没有任何想法。请帮助!!!!
优化键在哪里丢失?
如何优化?
这是一个笑话还是一个社会笑话?
这是一个笑话,还是你在取笑社会?
这不是一个笑话,我不是这样嘲弄社会的。
在你发表异端邪说之前,好好看看图片吧。
这不是一个笑话,我不是这样嘲弄的。
在你发表异端言论之前,请仔细看一下图片。
问题在于屏幕分辨率。