[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 406 1...399400401402403404405406407408409410411412413...631 新评论 Ruslan1 2012.09.30 12:23 #4051 Roman.: 1.同样,也是如此。 2.学习 如何使用谷歌! 非常感谢您!这似乎已经奏效。 Сергей 2012.09.30 13:28 #4052 Vinin: 你是否尝试过处理这些错误? 有几个条件。 1.第二个工具必须在市场概览中打开。甚至更好的是,如果有一个具有正确时间框架的图表打开(虽然不一定)。 2) 必须没有4066的错误。 3) 应该提交整个代码,而不仅仅是你认为问题所在的一部分代码,以供审查。 谢谢你的回答。有很多错误。我给了你一个代码部分,因为没有它,编译就成功了。以下是代码的全文。//+------------------------------------------------------------------+ //| PriseRatio.mq4 | //| Copyright 2012, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ //для часовиков aud/usd (прикрепляется) и nzd/usd #property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 DarkViolet //--- input parameters extern int ProcessDeep=1000; //--- buffers double ExtMapBuffer1[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { //----расчет отношения цен double a, b; int i; double Ratio(double a, double b) {a = iClose(NULL, PERIOD_H1, i); b = iClose("NZDUSD",PERIOD_H1,i); return (a/b); } //----оптимизация int counted_bars=IndicatorCounted(), limit; if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; if(limit>ProcessDeep) limit=ProcessDeep; for(int i=0;i<limit;i++) { ExtMapBuffer1[i]=Ratio(а,b); } //---- return(0); } Victor Nikolaev 2012.09.30 13:43 #4053 eternal2: 我给了你一个代码片段,因为没有它,编译就成功了。 下面是代码的全文。 为什么你决定MQL4支持函数的嵌套? //+------------------------------------------------------------------+ //| PriseRatio.mq4 | //| Copyright 2012, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 DarkViolet //--- input parameters extern int ProcessDeep=1000; //--- buffers double ExtMapBuffer1[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(), limit; if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; if(limit>ProcessDeep) limit=ProcessDeep; for(int i=0;i<limit;i++) { ExtMapBuffer1[i]=Ratio("NZDUSD",i); } //---- return(0); } double Ratio(string lsSymbol, int lnPos) { double res=0; int shift=iBarShift(lsSymbol, 0, Time[lnPos]); double a = iClose(NULL, 0, lnPos); double b = iClose(lsSymbol,0,shift); if (b>0) res=a/b; return (res); } Сергей 2012.09.30 13:56 #4054 Vinin: 是什么让你认为MQL4支持嵌套函数? 谢谢你,但你能不能解释一下哪个函数被嵌套了,同时对你的代码进行评论。 Рустам 2012.09.30 13:58 #4055 //+------------------------------------------------------------------+ //| _Symbol.mq4 | //| Copyright © 2012. XrustSolution. mail:xrustx@gmail.com | //| https://www.youtube.com/user/opmlv http://forexrust.info | //+------------------------------------------------------------------+ #property copyright "Copyright © 2012. XrustSolution. mail:xrustx@gmail.com" #property link "https://www.youtube.com/user/opmlv http://forexrust.info" //+------------------------------------------------------------------+ //| Super Global Variables | //+------------------------------------------------------------------+ #property indicator_chart_window #property indicator_buffers 4 #property indicator_width1 0 #property indicator_width2 0 //+------------------------------------------------------------------+ //| Extern Variables | //+------------------------------------------------------------------+ extern color Chart_Color = Teal ; extern string SYMBOL = "USDCHF" ; extern bool Mirror = false ; extern bool Sinshronise_Daily_Weekly = true ; extern double Scale_Multyplier = 1 ; extern int Bars_Back = 2000 ; //+------------------------------------------------------------------+ //| Defines & Global variavles | //+------------------------------------------------------------------+ #define empty EMPTY_VALUE //+------------------------------------------------------------------+ string _sy; int _per; //--- buffers double hi[]; double lo[]; double op[]; double cl[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void init(){_sy = StringUpper(SYMBOL); if(StringLen(_sy)<4){_sy = Symbol();} IndicatorShortName(_sy); IndicatorDigits(MarketInfo(_sy,MODE_DIGITS)); if(Sinshronise_Daily_Weekly){ _per = PERIOD_D1; }else{ _per = PERIOD_W1; } if(Scale_Multyplier==0){ Scale_Multyplier=1; } if(Scale_Multyplier > 1000){ Scale_Multyplier=1000; } //---- indicators SetIndexStyle(0,DRAW_HISTOGRAM,EMPTY,0,Chart_Color); SetIndexBuffer(0,hi); SetIndexEmptyValue(0,EMPTY_VALUE); SetIndexLabel(0,_sy); SetIndexStyle(1,DRAW_HISTOGRAM,EMPTY,0,Chart_Color); SetIndexBuffer(1,lo); SetIndexEmptyValue(1,EMPTY_VALUE); SetIndexLabel(1,_sy); SetIndexStyle(2,DRAW_HISTOGRAM,EMPTY,1,Chart_Color); SetIndexBuffer(2,op); SetIndexEmptyValue(2,EMPTY_VALUE); SetIndexLabel(2,_sy); SetIndexStyle(3,DRAW_HISTOGRAM,EMPTY,1,Chart_Color); SetIndexBuffer(3,cl); SetIndexEmptyValue(3,EMPTY_VALUE); SetIndexLabel(3,_sy); //---- return;} //+------------------------------------------------------------------+ void deinit(){return;} //+------------------------------------------------------------------+ void start(){ //---- Стандартный набор переменых static int pretime=0; static double prerp = 0; int i, ii = 0, counted = IndicatorCounted(); if (counted > 0) counted--; int limit = Bars - counted; int per = Period(); string sy = Symbol(); string txt=""; //---- Предварительные расчеты и объявления double op_1,op_2,_hi,_lo,_op,_cl; double ss = iOpen(sy,_per,0)/iOpen(_sy,_per,0); if(ss<1){ss=ss*MathPow(10,(Digits-MarketInfo(_sy,MODE_DIGITS)));} double sm, mno = (Point/MarketInfo(_sy,MODE_POINT))*ss*Scale_Multyplier; if(Bars_Back!=0){limit=Bars_Back;} if(limit < 5){limit=5;} //---- Масштабирование ширины гистограммы int width = GetChartScale(); SetIndexStyle(0,DRAW_HISTOGRAM,EMPTY,0); SetIndexStyle(1,DRAW_HISTOGRAM,EMPTY,0); SetIndexStyle(2,DRAW_HISTOGRAM,EMPTY,width); SetIndexStyle(3,DRAW_HISTOGRAM,EMPTY,width); //---- Основной расчет индикатора for(i=0;i<limit;i++){ //---- Пропускаем отсутвующие бары (синхронизация) while(iBarShift(_sy,per,iTime(sy,per,ii),true)<0){ ii++; continue; } //---- Вычисляем смещение для точки синхронизации цены op_1 = iOpen(sy ,_per,iBarShift(sy ,_per,iTime(sy,per,ii))); op_2 = iOpen(_sy,_per,iBarShift(_sy,_per,iTime(_sy,per,i))); sm = op_1 - op_2 * mno; //---- Читаем данные символа _hi = sm + iHigh(_sy,per,i)*mno; _lo = sm + iLow(_sy,per,i)*mno; _op = sm + iOpen(_sy,per,i)*mno; _cl = sm + iClose(_sy,per,i)*mno; //---- Переворачиваем чарт if(Mirror){ _hi += 2 * (op_1-_hi); _lo += 2 * (op_1-_lo); _op += 2 * (op_1-_op); _cl += 2 * (op_1-_cl); } //---- Отображаем график hi[ii] = _hi; lo[ii] = _lo; op[ii] = _op; cl[ii] = _cl; //---- Обработка дожи if(op[ii]==lo[ii]){op[ii]+=Point;} ii++; } //---- return;} //+------------------------------------------------------------------+ //| includes | //+------------------------------------------------------------------+ #import "user32.dll" bool GetWindowRect(int h, int& pos[4]); #import //+------------------------------------------------------------------+ //| Function : int GetChartScale()[1,2,4,6,13] | //| Copyright © 2012, XrustSolution. mail:xrustx@gmail.com | //| https://www.youtube.com/user/opmlv http://forexrust.info | //+------------------------------------------------------------------+ //| Description: Return bar width in current chart scale | //+------------------------------------------------------------------+ int GetChartScale(){ int h = WindowHandle(Symbol(), Period()); int rect[4]; if(h==0) return(1); GetWindowRect(h, rect); int wW = rect[2] - rect[0]; // ширина окна int bpc = WindowBarsPerChart(); if(bpc==0) return(1); int scale = MathFloor((wW-48)/bpc); switch(scale){ case 1 : return(0); case 2 : return(1); case 4 : return(2); case 8 : return(4); case 16 : return(7); case 32 : return(14); default : return(1); } return(1); } //+------------------------------------------------------------------+ //| Автор : Ким Игорь В. 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); } //+------------------------------------------------------------------+ Сергей 2012.09.30 14:05 #4056 FAQ: 我可以说俄语吗? 我是初学者。 请对代码的某个部分进行评论。 double Ratio(string lsSymbol, int lnPos) { double res=0; int shift=iBarShift(lsSymbol, 0, Time[lnPos]); double a = iClose(NULL, 0, lnPos); double b = iClose(lsSymbol,0,shift); if (b>0) res=a/b; return (res); [删除] 2012.09.30 14:23 #4057 问候! 你能告诉我代码有什么问题吗...我 不明白到底是什么问题,我该如何解决? 附加的文件: thsayn.mq4 15 kb Lowech 2012.09.30 16:40 #4058 你好 "我不能在EA中添加自定义函数!如果有人知道在哪里可以读到如何添加以及关于自定义函数的一般信息,请来信!"。 --- 2012.09.30 16:41 #4059 lowech: 你好 "我不能在EA中添加自定义函数!如果有人知道在哪里可以读到如何添加以及关于自定义函数的一般信息,请来信!"。 帮助! F1 ! Рустам 2012.09.30 16:42 #4060 文件 教科书 1...399400401402403404405406407408409410411412413...631 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
1.同样,也是如此。
2.学习 如何使用谷歌!
非常感谢您!这似乎已经奏效。
你是否尝试过处理这些错误?
有几个条件。
1.第二个工具必须在市场概览中打开。甚至更好的是,如果有一个具有正确时间框架的图表打开(虽然不一定)。
2) 必须没有4066的错误。
3) 应该提交整个代码,而不仅仅是你认为问题所在的一部分代码,以供审查。
我给了你一个代码片段,因为没有它,编译就成功了。 下面是代码的全文。
为什么你决定MQL4支持函数的嵌套?
是什么让你认为MQL4支持嵌套函数?
我可以说俄语吗? 我是初学者。
请对代码的某个部分进行评论。
问候!
你能告诉我代码有什么问题吗...我 不明白到底是什么问题,我该如何解决?
你好 "我不能在EA中添加自定义函数!如果有人知道在哪里可以读到如何添加以及关于自定义函数的一般信息,请来信!"。
帮助! F1 !
文件
教科书