[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 324 1...317318319320321322323324325326327328329330331...432 新评论 forexman77 2013.05.04 14:18 #3231 大家好!我研究了一个月的MQL4专家顾问,决定写一个专家顾问。 由于缺乏经验,我不想写一个新的,决定使用书中的tradingexpert.mq4模板。该策略的精髓如下:"拉里-威廉姆斯 "高点和低点的三条系统,为高点和低点绘制两个三天的EMA,卖出对高点买入,对低点买入。在模板中,在全局变量 部分,我删除了extern double Rastvor =28.0;这一行(实际上不需要),也从交易标准中删除了它。将全局变量中的MA值改为3。Extern int Period_MA_1= 3; // Period MA 1 extern int Period_MA_2= 3; // Period MA 2在交易标准部分,它是。 //--------------------------------------------------------------- 5 -- // Торговые критерии MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_LWMA,PRICE_TYPICAL,0); // МА_1 MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_LWMA,PRICE_TYPICAL,0); // МА_2 if (MA_1_t > MA_2_t + Rastvor*Point) // Если разница между { // ..МА 1 и 2 большая Opn_B=true; // Критерий откр. Buy Cls_S=true; // Критерий закр. Sell } if (MA_1_t < MA_2_t - Rastvor*Point) // Если разница между { // ..МА 1 и 2 большая Opn_S=true; // Критерий откр. Sell Cls_B=true; // Критерий закр. Buy } //--------------------------------------------------------------- 已成为。//--------------------------------------------------------------- 5 -- //交易标准 MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_EMA,PRICE_HIGH,0); // MA_1 MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_LOW,0); //MA_2 如果(PRICE_HIGH * Point >= MA_1_t * Point){ Opn_S=true。 Cls_B=true。} 如果(PRICE_LOW * Point <= MA_2_t * Point){ Opn_B=true; //开放标准。买入 Cls_S=true; // 关闭标准。Sell}//---------------------------------------------------------------现在问题的关键是:系统只打开卖单,但不愿意买。可能的错误是什么?很可能在其他地方有错误,请不要苛责,而是帮助提供建议) [ARCHIVE]Any rookie question, so [存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. Useful features from KimIV Mikhail Kozhemyako 2013.05.04 14:52 #3232 Forexman77://--------------------------------------------------------------- 5 -- //交易标准 MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_EMA,PRICE_HIGH,0); // MA_1 MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_LOW,0); //MA_2 如果(PRICE_HIGH * Point >= MA_1_t * Point){ Opn_S=true。 Cls_B=true。} 如果(PRICE_LOW * Point <= MA_2_t * Point){ Opn_B=true; //开放标准。买入 Cls_S=true; // 关闭标准。Sell}//---------------------------------------------------------------现在问题的关键是:系统只打开卖单,但不愿意买。可能的错误是什么?很可能我在其他地方有错误。 请不要评判,而是帮助我提出建议)。 这是什么? PRICE_LOW和PRICE_HIGH。它们是整数常数,其值为0或1,最高为6。你必须使用iHigh(Symbol(),Period(),i)来获得第i条的最大BID值,使用iLow(Symbol(),Period(),i)来获得第i条的最小BID值。如果在当前条形上翻滚,那么:如果( iHigh(Symbol(),Period(),0) >= MA_1_t) 而不需要将MA乘以Point。 Сергей 2013.05.04 14:55 #3233 大家下午好!请告诉我这是什么问题。我在Awesome 标准指标上附加了一个音量指标(Volume)。我想组织计算总波量(从低价到高价计算,并对应于真棒的最小和最大值)。见图1。什么是错误,数值没有被计算在内。下面是代码本身。#property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Red #property indicator_color2 SteelBlue #property indicator_width1 2 //---- basic fan indicator parameters extern bool Show_AOLine_2=true; extern int SlowEMA3=34; extern int EMA=2; extern bool Show_Volume=true; extern double coaf=1.5; extern bool Show_Vol_line=true; //---- indicator buffers double AOBuffer3[]; double ExtMapBuffer1[]; double VLUP; double prhgh_e=0, prhgh_s, prlw_e=0, prlw_s; datetime tmhgh, tmlw; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- drawing settings string name_ind = "Awesome_super_volumes"; IndicatorShortName("Awesome_super_volumes"); //---- AO_fan line 2 (basic) if(Show_AOLine_2 ==true){Show_AOLine_2=DRAW_LINE; } else {Show_AOLine_2=DRAW_NONE; } SetIndexBuffer(0,AOBuffer3); SetIndexStyle(0,Show_AOLine_2); SetIndexLabel(0,"basic line"); SetIndexBuffer(1,ExtMapBuffer1); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexLabel(1,"Volume"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Awesome Oscillator | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars=IndicatorCounted(); double prev,current; //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- AO_fan line 2 (basic) buffer for(int i=0; i<limit; i++) { //---- AO_fan basic line + Volumes AOBuffer3[i]=iMA(NULL,0,EMA,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,SlowEMA3,0,MODE_SMA,PRICE_MEDIAN,i); if (Show_Volume==true) { double nSum = Volume[i]*Point*coaf; if (AOBuffer3[i]<=0)ExtMapBuffer1[i] = nSum; if (AOBuffer3[i]>0)ExtMapBuffer1[i] = -nSum; } if (Show_Vol_line==true) { double Vol_Arr[]; if (AOBuffer3[i]<=0)Vol_Arr[i]=Volume[i]*Point*coaf; if (AOBuffer3[i]>0)Vol_Arr[i] = -Volume[i]*Point*coaf;} //---- dispatch values between 2 buffers } //-- Поиск High & Time if (AOBuffer3[i]>=0) { prhgh_s = High[i]; if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[i];} } //-- Поиск Low & Time if (AOBuffer3[i]<=0) { prlw_s = Low[i]; if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[i];} } // -- Пересчет баров от High до Low int colbr = iBarShift(NULL,0,tmhgh)-iBarShift(NULL,0,tmlw); int shift=iBarShift(NULL,0,tmlw); for (i=0; i<=colbr; i++) {VLUP += MathAbs(iVolume(NULL,0, shift+i));} SetText("Awesome_super_volumes"+Time[i], DoubleToStr(VLUP,0), tmhgh, 0.0010, Black); //-- Эти значения должны отображаться в окне Awesome SetText2("Волна1",DoubleToStr(VLUP,0),980,10,Gray,10); SetText2("Волна2",TimeToStr(tmlw,0),980,25,Gray,10); SetText2("Волна3",TimeToStr(tmhgh,0),980,40,Gray,10); SetText2("Волна4",DoubleToStr(colbr,0),980,55,Gray,10); //---- done return(0); } //+------------------------------------------------------------------+ void SetText(string name, string Vl, datetime t1, double p1, color c) { // if (ObjectFind(name)!=-1) ObjectDelete(name); ObjectCreate(name,OBJ_TEXT,WindowFind("Awesome_super_volumes"),0,0,0,0); ObjectSetText(name, Vl, 10, "Times New Roman", c); ObjectSet(name, OBJPROP_TIME1 , t1); ObjectSet(name, OBJPROP_PRICE1, p1); ObjectSet(name, OBJPROP_COLOR, c); } //--Ввeл дополнительную процедуру для отображения значений на чарте. Ее не должно быть. void SetText2(string name, string text, int xdist, int ydist, color c, int size) { ObjectCreate(name,OBJ_LABEL,0,0,0,0,0); ObjectSet(name, OBJPROP_XDISTANCE, xdist); ObjectSet(name, OBJPROP_YDISTANCE, ydist); ObjectSetText(name,text,7,"Arial Black",c); } forexman77 2013.05.04 15:27 #3234 Sepulca: 这是什么? PRICE_LOW和PRICE_HIGH。它们是整数常数,值为0或1,最多为6。你应该使用iHigh(Symbol(),Period(),i)来获得第i条的最大BID值,使用iLow(Symbol(),Period(),i)来获得第i条的最小BID值。如果在当前条形上翻滚,那么:如果( iHigh(Symbol(),Period(),0) >= MA_1_t) 而不需要将MA乘以Point。 非常感谢!!!。它的作用!!!。 Сергей 2013.05.05 04:45 #3235 伙计们,谁能告诉我这个代码有什么问题呢? Vladyslav Goshkov 2013.05.05 05:04 #3236 Fox_RM:伙计们,谁能告诉我这个代码有什么问题呢? if (Show_Vol_line==true) { double Vol_Arr[]; // ошибки: 1. Размещение 2. Область видимости if (AOBuffer3[i]<=0)Vol_Arr[i]=Volume[i]*Point*coaf; if (AOBuffer3[i]>0)Vol_Arr[i] = -Volume[i]*Point*coaf;} //---- dispatch values between 2 buffers } Сергей 2013.05.05 06:16 #3237 VladislavVG: 我不太明白。但在音量显示 方面没有问题。在计算体积方面存在问题。在这里的某个地方。 //-- Поиск High & Time if (AOBuffer3[i]>=0) { prhgh_s = High[i]; if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[i];} // -- tmhgh - выводил это значение оно = 0; } //-- Поиск Low & Time if (AOBuffer3[i]<=0) { prlw_s = Low[i]; if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[i];} } // -- Пересчет баров от High до Low int colbr = iBarShift(NULL,0,tmhgh)-iBarShift(NULL,0,tmlw); tmlw - тоже = 0; Почему? int shift=iBarShift(NULL,0,tmlw); for (i=0; i<=colbr; i++) {VLUP += MathAbs(iVolume(NULL,0, shift+i));} SetText("Awesome_super_volumes"+Time[i], DoubleToStr(VLUP,0), tmhgh, 0.0010, Black); Viktar Dzemikhau 2013.05.05 14:12 #3238 asdfgh001:下午好!我的问题会有点离题。请告诉我,是否有可能在某处找到将TA的形状切成CSV文件的方法?我可以使用txt、xls或任何其他可以用程序处理的格式。在各种TA文章、教科书中都有TA人物的例子,当然是作为普通图片。有没有人在H1-H4期间保存了或多或少的大套TA符号作为一些货币对的历史片段,例如?我上网搜索了一下,没有找到。当然,我们可以手动浏览历史,标记形状,将这段历史导出为.csv;重复所需的次数,最后收集形状基础。但如果有人已经做过了,希望能节省时间。提前感谢 :) 为什么你需要CSV文件的形状?编写一个形状库...自己写,这样你就能理解它们,而不是借用别人的。很多并不意味着更好! Vladyslav Goshkov 2013.05.05 14:45 #3239 Fox_RM: 我不太明白。但在显示体积方面没有问题。在数量计算 方面存在一个问题。在这里的某个地方。 1.阵列需要被放置--也就是分配内存。否则,根本没有地方可以存储这些值;)。2.当你收到一个新的刻度线时,你的均匀放置的阵列将被重新定位/重新初始化。这与范围有关。数组必须是 "静态 "类型的,以防止这种情况发生。阅读一些关于编程基础知识的文章。HZ 计数的问题是我向你指出了阵列使用的错误。 Сергей 2013.05.05 15:27 #3240 VladislavVG: 1.一个数组必须被定位,换句话说,必须分配内存。否则,就没有地方可以存储数值了;)。2.当你收到一个新的刻度线时,你的均匀放置的阵列将被重新定位/重新初始化。这与范围有关。数组必须是 "静态 "类型的,以防止这种情况发生。阅读一些关于编程基础知识的文章。HZ 计数的问题是我向你指出了阵列使用的错误。 也就是说,按照我的理解,Vol_Arr[] 应该被初始化为一个全局数组。 这个问题当然是一个空问题,但是。 1.那为什么在指标中能正确地显示交易量。2.在计算时,我访问了AOBuffer3[] 而不是Vol_Arr[]。谢谢你! 1...317318319320321322323324325326327328329330331...432 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
大家好!
我研究了一个月的MQL4专家顾问,决定写一个专家顾问。 由于缺乏经验,我不想写一个新的,决定使用书中的tradingexpert.mq4模板。
该策略的精髓如下:"拉里-威廉姆斯 "高点和低点的三条系统,为高点和低点绘制两个三天的EMA,卖出
对高点买入,对低点买入。
在模板中,在全局变量 部分,我删除了extern double Rastvor =28.0;这一行(实际上不需要),也从交易标准中删除了它。
将全局变量中的MA值改为3。
Extern int Period_MA_1= 3; // Period MA 1
extern int Period_MA_2= 3; // Period MA 2
在交易标准部分,它是。
//--------------------------------------------------------------- 5 --
//交易标准
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_EMA,PRICE_HIGH,0); // MA_1
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_LOW,0); //MA_2
如果(PRICE_HIGH * Point >= MA_1_t * Point)
{
Opn_S=true。
Cls_B=true。
}
如果(PRICE_LOW * Point <= MA_2_t * Point)
{
Opn_B=true; //开放标准。买入
Cls_S=true; // 关闭标准。Sell
}
//---------------------------------------------------------------
现在问题的关键是:系统只打开卖单,但不愿意买。可能的错误是什么?
很可能在其他地方有错误,请不要苛责,而是帮助提供建议)
//--------------------------------------------------------------- 5 --
//交易标准
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_EMA,PRICE_HIGH,0); // MA_1
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_LOW,0); //MA_2
如果(PRICE_HIGH * Point >= MA_1_t * Point)
{
Opn_S=true。
Cls_B=true。
}
如果(PRICE_LOW * Point <= MA_2_t * Point)
{
Opn_B=true; //开放标准。买入
Cls_S=true; // 关闭标准。Sell
}
//---------------------------------------------------------------
现在问题的关键是:系统只打开卖单,但不愿意买。可能的错误是什么?
很可能我在其他地方有错误。 请不要评判,而是帮助我提出建议)。
这是什么? PRICE_LOW和PRICE_HIGH。它们是整数常数,其值为0或1,最高为6。
你必须使用iHigh(Symbol(),Period(),i)来获得第i条的最大BID值,使用iLow(Symbol(),Period(),i)来获得第i条的最小BID值。
如果在当前条形上翻滚,那么:如果( iHigh(Symbol(),Period(),0) >= MA_1_t) 而不需要将MA乘以Point。
大家下午好!
请告诉我这是什么问题。
我在Awesome 标准指标上附加了一个音量指标(Volume)。
我想组织计算总波量(从低价到高价计算,并对应于真棒的最小和最大值)。见图1。
什么是错误,数值没有被计算在内。
下面是代码本身。
这是什么? PRICE_LOW和PRICE_HIGH。它们是整数常数,值为0或1,最多为6。
你应该使用iHigh(Symbol(),Period(),i)来获得第i条的最大BID值,使用iLow(Symbol(),Period(),i)来获得第i条的最小BID值。
如果在当前条形上翻滚,那么:如果( iHigh(Symbol(),Period(),0) >= MA_1_t) 而不需要将MA乘以Point。
伙计们,谁能告诉我这个代码有什么问题呢?
伙计们,谁能告诉我这个代码有什么问题呢?
我不太明白。但在音量显示 方面没有问题。在计算体积方面存在问题。在这里的某个地方。
下午好!
我的问题会有点离题。
请告诉我,是否有可能在某处找到将TA的形状切成CSV文件的方法?我可以使用txt、xls或任何其他可以用程序处理的格式。
在各种TA文章、教科书中都有TA人物的例子,当然是作为普通图片。有没有人在H1-H4期间保存了或多或少的大套TA符号作为一些货币对的历史片段,例如?
我上网搜索了一下,没有找到。当然,我们可以手动浏览历史,标记形状,将这段历史导出为.csv;重复所需的次数,最后收集形状基础。但如果有人已经做过了,希望能节省时间。
提前感谢 :)
为什么你需要CSV文件的形状?编写一个形状库...自己写,这样你就能理解它们,而不是借用别人的。很多并不意味着更好!
我不太明白。但在显示体积方面没有问题。在数量计算 方面存在一个问题。在这里的某个地方。
1.阵列需要被放置--也就是分配内存。否则,根本没有地方可以存储这些值;)。
2.当你收到一个新的刻度线时,你的均匀放置的阵列将被重新定位/重新初始化。这与范围有关。数组必须是 "静态 "类型的,以防止这种情况发生。
阅读一些关于编程基础知识的文章。
HZ 计数的问题是我向你指出了阵列使用的错误。
1.一个数组必须被定位,换句话说,必须分配内存。否则,就没有地方可以存储数值了;)。
2.当你收到一个新的刻度线时,你的均匀放置的阵列将被重新定位/重新初始化。这与范围有关。数组必须是 "静态 "类型的,以防止这种情况发生。
阅读一些关于编程基础知识的文章。
HZ 计数的问题是我向你指出了阵列使用的错误。
也就是说,按照我的理解,Vol_Arr[] 应该被初始化为一个全局数组。
这个问题当然是一个空问题,但是。
1.那为什么在指标中能正确地显示交易量。
2.在计算时,我访问了AOBuffer3[] 而不是Vol_Arr[]。
谢谢你!