[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 131 1...124125126127128129130131132133134135136137138...432 新评论 Viktar Dzemikhau 2013.02.02 11:50 #1301 我重新编写了一段关于我昨天问的问题的代码。现在一切都像它应该的那样。下面是3个函数,以显示用于获得原始信号的内容,因为这只是我所写的开始。//+-------------------------------------------------------------------------------------+ //| Открытие позиций | //+-------------------------------------------------------------------------------------+ bool Trade(int signal) { double fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_CLOSE,0); double slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_CLOSE,0); DeletePendingOrders(); if (signal == SIGNAL_BUY) if (!OpenBuy(fastMa, slowMa)) return(false); if (signal == SIGNAL_SELL) if (!OpenSell(fastMa, slowMa)) return(false); return (true); } //+-------------------------------------------------------------------------------------+ //| Получаем общий сигнал на открытие позиции | //+-------------------------------------------------------------------------------------+ int GetSignal() { // Получаем значения машек для дальнейших рассчётов double fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_CLOSE,0); double slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_CLOSE,0); // double filtrMa = iMA(NULL,i_TF,i_filtrMaPeriod,0,MODE_SMA,MODE_CLOSE,0); if (FindOrders() > 0) // Если есть открытые ордера, то.. return (SIGNAL_NO); //..ничего не делаем if (GetStateMa(fastMa, slowMa/*, filtrMa*/) == MA_DIRECT_TO_UP) // Если машки указывают вверх if ( (MathAbs(High[0] - fastMa) <= 0.1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) ) // Цена вблизи 0.1пп от fastMa return(SIGNAL_BUY); // Функция возвращает сигнал покупки // if (GetStateMa(fastMa, slowMa/*, filtrMa*/) == MA_DIRECT_TO_DOWN) // return(SIGNAL_SELL); return (SIGNAL_NO); }这里是购买功能。//+-------------------------------------------------------------------------------------+ //| Открытие длинной позиции | //+-------------------------------------------------------------------------------------+ bool OpenBuy(double fastMa, double slowMa) { int ticket = -1; // if ( (MathAbs(High[0] - fastMa) <= 0.1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) ) { if ((fastMa + i_thresholdFromMa * pt) > Ask) // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником Print("fastMa = ", DoubleToStr(fastMa,Digits)); Print("i_thresholdFromMa = ", DoubleToStr(i_thresholdFromMa * pt,Digits)); ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0); Print("OrderOpenPrice() = ", DoubleToStr(OrderOpenPrice(),Digits)); } if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true)) return (true); }这里有一句话。ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);我们有一个在ND(fastMa + i_thresholdFromMa * pt) 价格上开的头寸,但根本就没有开。为什么?我已经挣扎了2天了,我不知道该怎么做。在代码中,所有的东西都是一样的。我还没有写过真正的支票,我现在是为测试员写的。例如,这里有一张截图。在图表上你可以看到,价格不比fastMa(红色)高,总体上更低。但在代码中,明确规定了挂单应在价格上的条件。ND(fastMa + i_thresholdFromMa * pt)专业人士,有什么收获?我不知道该怎么做了......。 [Deleted] 2013.02.02 12:09 #1302 你好。我 在该指标的基础上写了一个指标,原始的信号-信号指标在连接到图表时显示其在所有以前的条上的数值(它适用于所有条,从条[1]开始),但根据它创建的指标(它适用于条[0])只在连接到图表时显示其数值,其数值是正确的,但在以前的条上是 "空的",请你修改它?我的代码。#property indicator_separate_window #property indicator_minimum -7 #property indicator_maximum 7 #property indicator_buffers 2 #property indicator_color1 Yellow #property indicator_color2 DarkOrange #property indicator_width1 2 #property indicator_width2 2 #property indicator_level1 0.0 //--- buffers double UpMapBuffer[]; double DnMapBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,UpMapBuffer); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexBuffer(1,DnMapBuffer); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int vb; // внутренний бар int i; for(i=1;i<Bars-34-1;i++) { double AO_Sig_Sig_1 = iCustom(NULL,0,"Signal-Signal",0,i); double AO_Sig_Sig_2 = iCustom(NULL,0,"Signal-Signal",0,i+1); if((High[i]<=High[i+1])&&(Low[i]>=Low[i+1])&&(AO_Sig_Sig_1==AO_Sig_Sig_2)) vb++; if((AO_Sig_Sig_1!=AO_Sig_Sig_2)||(i>3+vb)) break; } i=i*(AO_Sig_Sig_1); if(MathAbs(i)>3+vb) i=0; if(i>0) { UpMapBuffer[0]=i; } else { UpMapBuffer[0]=0; } if(i<0) { DnMapBuffer[0]=i; } else { DnMapBuffer[0]=0; } //---- return(0); } //+------------------------------------------------------------------+ Boris 2013.02.02 12:10 #1303 维克多,我认为你应该在Asc+距离上加一个暂停,在条件中指定Asc和Mashka的比例,然后就会是你想要的结果。试试吧! Mikhail Kozhemyako 2013.02.02 12:14 #1304 hoz:你可以在图表上看到,价格不在fastMa(红色腕带)之上,而是完全低于它。但在代码中,条件明确指出,暂停应该是在价格上。专业人士,有什么收获?我不知道该怎么做了......。 也许在下订单的时候,MA比现在画的要低。试着不从第0个小节而从第1个小节取MAA值。 Viktar Dzemikhau 2013.02.02 12:44 #1305 borilunad:维克多,我认为你应该在Asc+距离上加一个暂停,在条件中指定Asc和Mashka的比例,然后就会是你想要的结果。试试吧! 鲍里斯,这就是我所做的。//+-------------------------------------------------------------------------------------+ //| Получаем общий сигнал на открытие позиции | //+-------------------------------------------------------------------------------------+ int GetSignal() { // Получаем значения машек для дальнейших рассчётов double fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_CLOSE,0); double slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_CLOSE,0); // double filtrMa = iMA(NULL,i_TF,i_filtrMaPeriod,0,MODE_SMA,MODE_CLOSE,0); if (FindOrders() > 0) // Если есть открытые ордера, то.. return (SIGNAL_NO); //..ничего не делаем if (GetStateMa(fastMa, slowMa/*, filtrMa*/) == MA_DIRECT_TO_UP) // Если машки указывают вверх // if ( (MathAbs(High[0] - fastMa) <= 0.1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) ) // Цена вблизи 0.1пп от fastMa if ( (MathAbs(Ask - fastMa) <= 0.1 * pt ) || ( MathAbs(Ask - fastMa) <= 0.1 * pt) ) return(SIGNAL_BUY); // Функция возвращает сигнал покупки // if (GetStateMa(fastMa, slowMa/*, filtrMa*/) == MA_DIRECT_TO_DOWN) // return(SIGNAL_SELL); return (SIGNAL_NO); }而这里是职位空缺。//+-------------------------------------------------------------------------------------+ //| Открытие длинной позиции | //+-------------------------------------------------------------------------------------+ bool OpenBuy(double fastMa, double slowMa) { int ticket = -1; if ((fastMa + i_thresholdFromMa * pt) > Ask) // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником Print("fastMa = ", DoubleToStr(fastMa,Digits)); Print("i_thresholdFromMa = ", DoubleToStr(i_thresholdFromMa * pt,Digits)); ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0); Print("OrderOpenPrice() = ", DoubleToStr(OrderOpenPrice(),Digits)); if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true)) return (true); }一切似乎都是正确的。但它仍然存在。塞普尔卡。 也许在下订单的时候,MAHA比现在画的要低。试着从第1条而不是第0条中获取MA值。 试了一下,没有区别。我把它放回...对我来说,重要的是在这个时间点上发生了什么,而不是以前发生了什么。下面是一个截图(如果从机器收到的值不是0,而是1)。 Boris 2013.02.02 13:16 #1306 维克多,这就是为什么我一开始就写条件,这样我就能看到一切,所以更容易发现逻辑错误,特别是在还没有足够的知识和经验的时候,在未来很长一段时间内,我都算得上是这样。专业人士很容易操纵函数、文件和库,他们可能已经忘记了自己是如何逐渐掌握这些智慧的。但我们不可能在没有实践的情况下学习理论,而更多的是取决于每个人的性格。 Artyom Trishkin 2013.02.02 19:03 #1307 hoz: 鲍里斯,这就是我所做的。而这里是该职位的开幕式。一切似乎都是正确的。但它仍然存在。试了一下,没有区别。我把它放回...对我来说,重要的是在这个时间点上发生了什么,而不是之前发生了什么。下面是一个截图(如果从机器收到的值不是0,而是1)。 最后,告诉我你到底想做什么...例如:MAA某某正在上升,并且高于MAA某某,价格高于/低于MAA某某,如果是真的,那么就在这样的距离下一个挂单。我将给你一个粗略的算法。因为当你的代码片段被撕掉时,很难引导你走向正确的方向。而这个问题是针对五年级的(夸张的)。至于突出显示:在开盘价上下功夫,那么你就不会看到MAC在零点栏上重画了 Роман 2013.02.03 04:57 #1308 artmedia70:...很难给你指出正确的方向......IMHO,不难,但很容易 "指挥 "或发送,因为该同志太热衷于与小袋和货架的斗争,不屑于研究教科书和文件。:-) Artyom Trishkin 2013.02.03 06:14 #1309 Roman.:IMHO,不难,但很容易 "指挥 "或发送,因为该同志太热衷于打击小袋和货架,懒得研究教科书和文件。:-) 男人,几乎没有陷阱......。没有奇迹。 所以一个人用这些石头包围了自己,并移动它们,移动它们。 Snegovik 2013.02.03 08:24 #1310 Sepulca: 非常感谢。正是需要的东西) 1...124125126127128129130131132133134135136137138...432 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我重新编写了一段关于我昨天问的问题的代码。现在一切都像它应该的那样。下面是3个函数,以显示用于获得原始信号的内容,因为这只是我所写的开始。
这里是购买功能。
这里有一句话。
我们有一个在ND(fastMa + i_thresholdFromMa * pt) 价格上开的头寸,但根本就没有开。为什么?
我已经挣扎了2天了,我不知道该怎么做。在代码中,所有的东西都是一样的。我还没有写过真正的支票,我现在是为测试员写的。
例如,这里有一张截图。
在图表上你可以看到,价格不比fastMa(红色)高,总体上更低。但在代码中,明确规定了挂单应在价格上的条件。
专业人士,有什么收获?我不知道该怎么做了......。
你好。我 在该指标的基础上写了一个指标,原始的信号-信号指标在连接到图表时显示其在所有以前的条上的数值(它适用于所有条,从条[1]开始),但根据它创建的指标(它适用于条[0])只在连接到图表时显示其数值,其数值是正确的,但在以前的条上是 "空的",请你修改它?
我的代码。
维克多,我认为你应该在Asc+距离上加一个暂停,在条件中指定Asc和Mashka的比例,然后就会是你想要的结果。试试吧!
你可以在图表上看到,价格不在fastMa(红色腕带)之上,而是完全低于它。但在代码中,条件明确指出,暂停应该是在价格上。
专业人士,有什么收获?我不知道该怎么做了......。
维克多,我认为你应该在Asc+距离上加一个暂停,在条件中指定Asc和Mashka的比例,然后就会是你想要的结果。试试吧!
鲍里斯,这就是我所做的。
而这里是职位空缺。
一切似乎都是正确的。但它仍然存在。
也许在下订单的时候,MAHA比现在画的要低。试着从第1条而不是第0条中获取MA值。
试了一下,没有区别。我把它放回...对我来说,重要的是在这个时间点上发生了什么,而不是以前发生了什么。
下面是一个截图(如果从机器收到的值不是0,而是1)。
维克多,这就是为什么我一开始就写条件,这样我就能看到一切,所以更容易发现逻辑错误,特别是在还没有足够的知识和经验的时候,在未来很长一段时间内,我都算得上是这样。专业人士很容易操纵函数、文件和库,他们可能已经忘记了自己是如何逐渐掌握这些智慧的。但我们不可能在没有实践的情况下学习理论,而更多的是取决于每个人的性格。
鲍里斯,这就是我所做的。
而这里是该职位的开幕式。
一切似乎都是正确的。但它仍然存在。
试了一下,没有区别。我把它放回...对我来说,重要的是在这个时间点上发生了什么,而不是之前发生了什么。
下面是一个截图(如果从机器收到的值不是0,而是1)。
最后,告诉我你到底想做什么...例如:MAA某某正在上升,并且高于MAA某某,价格高于/低于MAA某某,如果是真的,那么就在这样的距离下一个挂单。我将给你一个粗略的算法。因为当你的代码片段被撕掉时,很难引导你走向正确的方向。而这个问题是针对五年级的(夸张的)。
至于突出显示:在开盘价上下功夫,那么你就不会看到MAC在零点栏上重画了
...很难给你指出正确的方向......
IMHO,不难,但很容易 "指挥 "或发送,因为该同志太热衷于与小袋和货架的斗争,不屑于研究教科书和文件。:-)
IMHO,不难,但很容易 "指挥 "或发送,因为该同志太热衷于打击小袋和货架,懒得研究教科书和文件。:-)
所以一个人用这些石头包围了自己,并移动它们,移动它们。
非常感谢。正是需要的东西)