[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 660

 
Craft:


安纳托利,非常感谢你,可惜你不能在这里插入一个图标,就像Skype中的蝴蝶结。一切都是简单而优雅的。我从与其他技术分析程序的交流中了解到,它应该是这样的,但我在使用mql方面还没有实践。谢谢你在方法上做标记的提示--我会想办法的。

对于我的最后一个建议,如何避免该EA在一个柱子上放置多个订单?我已经收到了好心人的提示,但他们并没有帮助。

我试图解决你的问题,这是我得到的结果。但首先要做的是。

谁是有罪的,该怎么做?或者腿从哪里来...

在您的专家顾问中,CCI指标的 不同设置 被用于开仓(以及分别用于关闭前一个仓位)。你有不同的买入设置和不同的卖出设置。就我的理解,这就是诀窍。例如,在上升趋势中,使用不太敏感的设置来买入,让利润 "增长",是更有利可图的(也就是说,持有头寸是有意义的)。(即在一个趋势中持有较长时间的头寸是有意义的)。而卖出(上升趋势)则需要更敏感的设置,以便能够快速进入/退出,例如在试图抓住修正时(因此在市场上保持反趋势头寸的时间更短)。一切都非常合乎逻辑,想法也很合理,但这个系统有一个微妙的地方--如果因为设置的不同而同时出现两个相反的信号(事实上,对于终端来说是两个指标),该怎么办?

关于蓝色箭头...

专家顾问在一个条形图上同时得到一个买入和卖出的信号,正如我在上面写的,当你打开一个头寸时,相反的头寸应该被关闭。在这种情况下,买入信号被发出,卖出信号被关闭;如果到那时还没有卖出,顾问就会打开BUY。在下一个交易日,产生了相反的信号,即卖出,因此刚刚打开的买入被关闭。另一个观察,你是否注意到,只有买入(大量的蓝色箭头)才会 "摇摆"?买入/卖出方法的实现,据我所知,来自于教程,但有一个特点,即操作完成后,通过操作者返回退出start()方法,即一个tick只能有一个开仓/平仓。因此,当我得到一个 "双重信号 "时,所有的交易都被关闭(先描述块状关闭 ),然后块状打开交易,在其中先描述买入!!!买入后,从start()退出,所以顾问只是没有时间去销售:))),并循环直到得到一个 "正常 "单子。

关于解决方法...

有几种方法可以解决这个问题。
1.老式的那个。
首先,你可以 "扼杀 "这种想法,只需为购买和销售设置相同的参数,问题就会自行消失。

2.复杂的。
确定主要趋势的算法应该写进专家顾问,相应地,应该设置不同的交易 "权重"。因此,当相反的信号到来时,应该优先考虑有更大 "权重 "的那一个(即有趋势的那个)。

3.无标题。
当接收多方向的信号时...
什么都不做。

if(Opn_B && Opn_S)return;

这正是下面所附文件中的选项。
我希望我把一切都解释清楚了。
好运:)))

附加的文件:
11_3_1.mq4  13 kb
 

Volfram 的帖子因在几个主题中多处出现而被删除。

沃尔弗拉姆,你已经专门为此目的创建了自己的主题。你已经得到了回答;这还不够吗?

P.S. 让我告诉你一个秘密,沃尔弗拉姆:人们对你的想法没有明显的兴趣,这隐含着它不值得关注。因此,没有人愿意 "有偿 "实施它。

 
ToLik_SRGV:

2.复杂的。
我们应该把确定主要趋势的算法整合到专家顾问中,从而给交易以不同的 "权重"。因此,当相反的信号到来时,应该优先考虑有更大 "权重 "的那一个(即有趋势的那个)。

3.无标题。
在收到不同方向的信号后......。
什么都不做。

这正是下面所附文件中的选项。
我希望我把一切都解释清楚了。
好运:)))

我也可以加入我的里程碑...:)

我也是从教科书开始的。你可以把它变得更简单:只要把卖出信号时的买入平仓和买入信号时的卖出平仓去掉就可以了,也就是说不要使用波段交易,这在谢尔盖-科瓦廖夫的教程中已经实现...追踪位置不应该由门票来做,而是由魔术师来做。起初我是这样做的,静静地测试我的想法。然后我为工作写了自己的函数...

ZS.我没有看过代码,所以我可能对这个EA有误...

 

我不知道如何找到一个函数的极值

我有一个存储数值的数据数组。

如何使用一个由250个元素组成的数据数组找到断裂--极值,并只存储这些极值所在的元素的编号。

 

伙计们,我有这个问题。

趋势检测功能明确指出,如果第一个柱状图的AC值大于 第二个柱状图的AC值(即增加), 趋势是下降趋势 (其他指数显示下降),那么在这种情况下,返回0,即没有下降趋势...但EA却顽固地忽略了它,原因可能是什么?


趋势反转的功能。

int Trend_BBOsMA (string sy, int tf)
{
   if (sy=="" || sy=="0") sy=Symbol();
double
   BB    =iCustom(sy,tf,"BB_MA",13,13,0,1),
   OsMA  =iOsMA  (sy,tf,9,21,5,PRICE_CLOSE,1),
   AC1   =iAC(sy,tf,1),
   AC2   =iAC(sy,tf,2),
   AC3   =iAC(sy,tf,3);
   
   if (BB>0 && OsMA>0 && AC1>AC2) return(1);
   if (BB<0 && OsMA<0 && AC1<AC2) return(-1);
   else return(0);
}

检查开盘股(在开始时,趋势检查,对其没有反应:trH1和 trM15 ) --进一步实验条件,不要介意,但代码是有效的......

//============================================================================================== 
   // Доливка 1
//==============================================================================================  
//------------------------- Покупка 1 ------------------------   
   if (AddPose1 &&
         trH1==1 &&                  // Если часовой и 
         trM15==1 &&                 // пятнадцатиминутный тренды восходящие
         Mom5_1>Mom5_2 &&              // найден разворот
         Mom5_2<=Mom5_3 &&             // Моментума
//         Mom5_2<=100.0 &&
//         DeM5_1<=0.6 &&                  // и Демаркер в зоне перепроданности
//         AC1>AC2 &&                    // Ускорение вверх ----------------------- ВОТ ЗДЕСЬ УБРАЛ
         SecondsAfterOpenLastPos(NULL, OP_BUY, 511)>=4*60
      )
         {
            Magic=511;          // Задаём магик... 
            Lots=GetSizeLot();
            divider=1;
//            if (trH1==10 || trM15==10) divider=2;
            Lots_New=NormalizeLot(Lots/divider, true, NULL);
            New_Comm="Buy_M5_Стратегия_1_Доливка1";   // Задаём комментарий для позиции
            OpenPosition(NULL, OP_BUY, Lots_New, 0, 0, Magic, New_Comm);
         }
//------------------------- Продажа 1 ------------------------   
   if (AddPose1 && 
         trH1==-1 &&                 // Если часовой и 
         trM15==-1 &&                // пятнадцатиминутный тренды нисходящие
         Mom5_1<Mom5_2 &&              // найден разворот
         Mom5_2>=Mom5_3 &&             // Моментума
//         Mom5_2>=100.0 &&
//         DeM5_1>=0.4 &&                  // и Демаркер в зоне перекупленности
//         AC1<AC2 &&                    // Ускорение вниз ------------------------ ВОТ ЗДЕСЬ УБРАЛ
         SecondsAfterOpenLastPos(NULL, OP_SELL, 511)>=4*60
      )
         {
            Magic=511;          // Задаём магик... 
            Lots=GetSizeLot();
            divider=1;
//            if (trH1==-10 || trM15==-10) divider=2;
            Lots_New=NormalizeLot(Lots/divider, true, NULL);
            New_Comm="Sell_M5_Стратегия_1_Доливка1";   // Задаём комментарий для позиции
            OpenPosition(NULL,OP_SELL,Lots_New,0,0,Magic,New_Comm);
         }
//==============================================================================================

也许有人会看到我看不到的东西?谢谢。

 
截图中没有显示BB_MA指标。而且上层代码中没有趋势方向检查。BB变量将始终包含一个值。据我所知,BB_MA指标是一个移动平均线。为了确定移动平均线的方向,应该在不同的蜡烛图上有2个数值,例如在第一个和第二个蜡烛图上,并将这些数值相互比较。因此我们可以说,上层代码只是部分地完成了它的任务。
 
IgorM:

我不知道如何找到一个函数的极值

我有一个存储数值的数据数组。

如何使用一个由250个元素组成的数据数组找到断裂--极值,并只存储这些极值所在的元素的编号。


我们创建一个循环,在这个循环中,我们循环浏览数组的值。数组 前一个单元的值与当前单元的值进行比较。如果它更高,我们就转到下一个循环的迭代。简而言之,只要数组中每个后续单元格的值被递增,我们就继续循环。一旦数值变得比前一个小,我们就在一个预先声明的数组中存储前一个单元格的数字,因为趋势中断已经发生--我们已经找到了峰值。现在的趋势是往下走。现在我们运行搜索,直到下一个单元格找到一个比前一个单元格更高的值。一旦发生这种情况,前一个单元的数字就会被储存在一个预定义的数组中,因为发生了趋势逆转--我们已经找到了谷底的位置。你可以把数字放在不同的数组中,以过滤掉高峰和低谷。简而言之,在浏览了所有数组的值之后,我们得到了排序的数据(在一个/两个其他数组中寻找单元格的数字)。
 
drknn:

我们设置了一个循环,在其中循环浏览数组的值。我们将数组中前一个单元格的值与当前单元格的值进行比较。如果它更高,我们就转到下一个循环的迭代。简而言之,只要数组中每个后续单元格的值被递增,我们就继续循环。一旦数值变得比前一个小,我们就把前一个单元格的数字保存到一个预先声明的数组中,因为发生了趋势中断--我们已经找到了一个峰值。现在的趋势是往下走。现在我们运行搜索,直到下一个单元格找到一个比前一个单元格更高的值。一旦发生这种情况,前一个单元的数字就会被储存在一个预定义的数组中,因为发生了趋势逆转--我们已经找到了谷底。你可以把数字放在不同的数组中,以过滤掉高峰和低谷。简而言之,在浏览完数组的所有数值后,我们将得到排序的数据(一个/两个其他数组中的单元格数字)。

是的,所以我们必须尝试,而 - 这是到第一个高峰,然后........。- 我搞不清楚。
 
drknn:
截图中没有显示BB_MA指标。而且上层代码中没有趋势方向检查。BB变量将始终包含一个值。据我所知,BB_MA指标是一个移动平均线。为了确定移动平均线的方向,应该在不同的蜡烛图上有2个数值,例如在第一个和第二个蜡烛图上,并将这些数值相互比较。因此,我们可以说,上层代码只是部分地实现了它的目的。

不,BB_MA是Bears&Bulls_MA的简称。 它将牛市和熊市的数值相加,并以直方图的形式输出,类似于McDuck或类似的东西。总是当直方图高于零时,它的趋势是上升,当它低于零时,它的趋势是下降...

因此,检查趋势的方向是。

if (BB>0 && OsMA>0 && AC1>AC2) return(1);

为UP和

if (BB<0 && OsMA<0 && AC1<AC2) return(-1);

为下降,好和

 else return(0);

为平面。

即:如果Bears&Bulls_MA高于零,OsMA高于零,并且第一个AC棒的值大于第二个AC棒的值,则函数返回1。

而反之,则是下降趋势。好吧,对于平坦的地方,图表中的所有其他差异(现在......,以后,当我把它整理出来,我将把检查运动与加速/减速和反转联系起来)。

只有在有明确的 "上升趋势 "或 "下降趋势 "时才应开仓。基本上,一切都在运作,直到我加入了控制货币运动速度的AC,以便在运动结束时,在趋势耗尽或修正时排除(部分)开仓。

到目前为止,它还没有发挥作用...而且正好是交流。

 
IgorM:

是的,所以我们必须尝试,而 - 这是直到第一个高峰,然后........- 我搞不清楚。

不 - 循环应该通过for来完成。我打算试着编一个剧本。这个想法实际上是可行的。
原因: