新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 52

 
trader781:

如果停止/停止是200,该怎么做?

tp=NormalizeDouble((price+(TakeProfit*_Point)),Digits)。

按117.000的汇率计算,美元兑日元将产生317.000的收益。

预期结果 117.200

如果Point()==0.001(在USDJPY上),那么200*0.001就等于0.2。

现在,如果我们把0.2加到117.0,我们得到117.2

哪里有 "不公平"?

 
Artyom Trishkin:

如果Point()==0.001(在USDJPY上),那么200*0.001就等于0.2。

现在,如果我们把0.2加到117.0,我们得到117.2

而 "不公平 "在哪里?

预计117+(200*_Point)将产生117.200。

它通常在欧元兑美元上测试

维塔利在上面描述了它,谢谢你。

我想我已经找到了。

我认为它作为中间算法已经很好了,现在有必要以某种方式过滤这些时刻。

https://www.mql5.com/ru/charts/6351907/audjpy-m5-metaquotes-software-corp

График AUDJPY, M5, 2017.01.02 22:49 UTC, MetaQuotes Software Corp., MetaTrader 4, Demo
График AUDJPY, M5, 2017.01.02 22:49 UTC, MetaQuotes Software Corp., MetaTrader 4, Demo
  • www.mql5.com
Символ: AUDJPY. Период графика: M5. Брокер: MetaQuotes Software Corp.. Торговая платформа: MetaTrader 4. Режим торговли: Demo. Дата: 2017.01.02 22:49 UTC.
 
trader781:

117+(200*_Point)预计将给出117.200的输出。

...

嗯,这就是他给...我给你看了计算结果。或者你有多币种,并从一个 "非本地 "符号中获取数据?

然后使用SymbolInfoDouble()和(int)SymbolInfoInteger(),而不是Point()和Digits()。

 
Artyom Trishkin:

嗯,这就是他给...我给你看了计算结果。或者你有一个多币种,并从一个 "非本地 "符号中获取数据?

然后用SymbolInfoDouble()和(int)SymbolInfoInteger()代替Point()和Digits()。

谢谢你,它的工作))))。

我目前正在寻找一种方法,在一连串的订单中插入一个追踪止损。

我有10个订单,从115.000到117.000,每步200个。

每一批都比前一批大X值

目标是在整个订单链上设置追踪止损,使用以下计算方法(平均价格)+(y*_Point)。

我有跟踪止损,我的问题是如何将其附加到整个堆栈的平均价格上,以及如何根据手数计算。

 
trader781:

谢谢你,它的工作))))。

目前正在寻找一种在订单链中插入尾数的方法

我有10个订单,从115.000到117.000,每步200个。

每一批都比前一批大X值

目标是在整个订单链上设置追踪止损,使用以下计算方法(平均价格)+(y*_Point)。

我有 一个跟踪止损器本身;问题是如何将它附加到整个堆栈 平均价格上,以及如何根据手数来计算它

一个普遍的建议:从头开始学习编程。那么你就不会有这样的问题了,编程并不是一件容易的事。

问题的实质是:因此,你必须查看循环中的所有订单,只选择 "必要的 "并修改它们。但你必须非常小心地对待这个问题,因为替换掉所选订单 工作的概率非常高。

 
Alexey Viktorov:

一个普遍的建议:从头开始学习编程。那么就不会有这样的问题了,编程并不容易。

问题的实质是:因此,你需要在循环中浏览所有的订单,只选择 "必要的 "并修改它们。但你必须非常小心地对待这个问题,因为替换掉所选订单 工作的概率非常高。

目前我正在做最后一个,其他的都暂停了,但方案不准确,我想做得更好。
 

大家好,我写了一个基于MAs的EA。(我自己在MQL4中开发了一段时间,决定从简单的东西开始)。所以我想知道我做错了什么。专家顾问的本质很简单:当两个或三个MAs交叉时发出警报(取决于方法:积极的=两个MAs的交叉,保守的=三个MAs的交叉)......。这就是全部。我将以自己的方式进入市场。在我的专家顾问中,我规定了两个功能。积极的--这是两个最快的MAs简单交叉的信号,保守的--当在两个快速的MAs交叉时,你也应该考虑最慢的那个(即趋势方向的信号)。问题是,专家顾问只给出一个警报(当它开始或改变时间框架时),而对所有后续的信号则保持沉默如果你能告诉我出了什么问题,我将非常感激。我已经根据MQL4的规则为所有的事件规定了功能。当然,我可以在On Tick事件中注册所有的功能,但我想单独注册功能,这样就可以很容易地调用 这些功能,我想随着时间的推移增加新的 "过滤器 "功能。

编码

================================================================================================

extern bool Metod=false; // 方法选择:保守型或积极型。

Extern int Time_Frame=1;//时间框架

输入 bool Metod=false; //Conservative-TRUE | Aggressive-FALSE

外部inttern FastMA_Parametr=5。

外部int intMA_Parametr=8;

外置 int SlowMA_Parametr=18;

外来的,内向的,趋势的MA=163。

外部 bool DemarkGo=false;

外部的inttern Demperiod=4。

int rez;//如果MA向下交叉,rez=-1。如果向上,rez=1。

//+------------------------------------------------------------------+

//初始化MA

double FastMA=iMA(Symbol(),Time_Frame,FastMA_Parametr,0,3,0,0); // FastMA

double MiddiMA=iMA(Symbol(),Time_Frame,MidMA_Parametr,0,3,0,0);// Average MA

double SlowMA=iMA(Symbol(),Time_Frame,SlowMA_Parametr,0,1,0,0); Slow МА


//+------------------------------------------------------------------+

int OnInit()

{

rez=0。

return(INIT_SUCCEEDED)。

}

//=======================================

//------------------------------------------------------------------------------

空白的OnDeinit(const int reason)。

{



}

//=============================================

//+---------------------,如果Metod=true---------------------------------------------+,则Konservative信号的函数。

int Konservative()

//检查3条线的向上交叉点

{

如果(Metod==true)


{

如果(FastMA>MiddiMA&&MiddiMA>SlowMA&&rez<=0)

{

Alert(Symbol(),Time_Frame,"----Up----.保守的")。

rez=1。

评论("FastMA",FastMA," MiddiMA",MiddiMA," SlowMA",SlowMA," rez",rez)。

return(rez)。


}


//检查3条线的向下交叉情况

如果(FastMA<MiddiMA&&MiddiMA<SlowMA&&rez>=0)

{

Alert(Symbol(),Time_Frame," ---- DOWN----.保守的")。

rez=-1。

评论("FastMA",FastMA," MiddiMA",MiddiMA," SlowMA",SlowMA," rez",rez)。

return(rez)。


}

}

return(rez)。

}

//=================================================

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

激进的功能,如果

int Agressive()

// 检查2条线的向上交叉,没有慢速。


{

如果(Metod==false)

{

如果(FastMA>MiddiMA&&rez<=0)

{

Alert(Symbol(),Time_Frame,"----Up----.咄咄逼人")。

rez=1。

评论("FastMA",FastMA," MiddiMA",MiddiMA," SlowMA",SlowMA," rez",rez)。


}


//检查2条线的向下交叉,没有慢速线

如果(FastMA<MiddiMA&&rez>=0)

{

Alert(Symbol(),Time_Frame," ---- DOWN----.激进")。

rez=-1。

评论("FastMA",FastMA," MiddiMA",MiddiMA," SlowMA",SlowMA," rez",rez)。

}

}

return(rez)。

}

 
Олег:


在这里,我认为你可以自己做。
附加的文件:
6645.mq4  7 kb
 
trader781:
目前,这是最后一个订单,其他的都暂停了,但这个计划并不精确,我希望它能更好。

不,不是100%。或者你说的是别的东西。

一般来说,该算法如下。

你设置了一个循环来浏览所有的订单。

你选择下一个订单,与之合作。

你检查一下,看看是否需要这个命令...如果不是,下一个循环的迭代...

如果是 "需要",请检查它是否适合修改。只需比较它离其止损水平有多远

如果距离足够远,就会修改订单。


因此,如果你有一个对所有订单进行循环的修改函数,而在其调用之前,循环也在工作,那么所选的订单 将被改变...

 
Alexey Viktorov:

不,不是100%。或者你说的是别的东西。

一般来说,该算法如下。

你设置了一个循环来浏览所有的订单。

你选择下一个订单,与之合作。

你检查一下,看看是否需要这个命令...如果不是,下一个循环的迭代...

如果是 "需要",那么你就检查它是否适合修改。只需比较它离其止损水平有多远

如果足够远,就会修改命令。


因此,如果你有一个对所有订单进行循环的修改函数,而在其调用之前,循环也在工作,那么所选的订单 将被改变...

问题是,总是会有某一批次的亏损订单,这些订单也必须以牺牲其他订单为代价来填补。触发因素是关闭时间。如果我们哪怕关闭一个,整个链条就会丢失。因此,问题是如何拖出所有选定的平均价格。