任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1063

 
mould:
但你如何启用这种模式?

勾选测试器窗口左下方的方框。

 

你好,Guru。

你能告诉我,我是否在正确的轨道上?

目标:根据与MA的距离,引入可变的地段大小。

在输入参数中。

extern double Lot1 = 0.01; // first variant of lot
extern double Lot2 = 0.03; // 第二批变体
extern int Distan = 20; // 与SlowMA的距离

马云已经在专家顾问机构中被定义了。

double SlowMA = iMA(NULL,60,periodSlowMA,0,MODE_EMA,PRICE_MEDIAN,0) 。

此外,我们还需要一个条件:如果当前价格(买入或卖出,取决于方向)达到了远期规模,我们就使用第一手规模,如果更多,我们就使用第二手。

首先想到的是。

如果(Ask-lowMA<Distan)Lot == Lot1;
如果(SlowMA-Bid<Distan)Lot == Lot1;
如果(Ask-lowMA>Distan)Lot == Lot2;
如果(SlowMA-Bid>Distan)Lot == Lot2;

但这并不奏效。错误要么是在Lot连接中,要么是在一般逻辑中。

提前感谢。

 
delf699:

你好,Guru。

你能告诉我,我是否在正确的轨道上?

目标:根据与MA的距离,引入可变的地段大小。

在输入参数中。

外部双数Lot1 = 0.01; // 第一个手的大小
extern double Lot2 = 0.03; // Second lot variant.
Extern int Distan = 20; // 与SlowMA的距离

在专家顾问的正文中定义了马云。

double SlowMA = iMA(NULL,60,periodSlowMA,0,MODE_EMA,PRICE_MEDIAN,0) 。

然后我们需要一个条件:如果当前价格(买入价或卖出价,取决于方向)达到Distant大小,我们使用第一个手数,如果它更大,我们使用第二个手数。

首先想到的是。

如果(Ask-SlowMA<Distan)Lot == Lot1;
如果(SlowMA-Bid<Distan)Lot == Lot1; 。
如果(Ask-lowMA>Distan)Lot == Lot2;
如果(SlowMA-Bid>Distan)Lot == Lot2。

但这并不奏效。这要么是与洛特有关的错误,要么是一般逻辑上的错误。

预先感谢你。

当Ask-SlowMA可以大于Distan时,Ask、Bid和SlowMA有什么关系?
 

买入价和卖出价是最后已知的买入价和卖出价,即当前价格。

SlowMA是我重新命名的马

(double SlowMA = iMA(NULL,60,periodSlowMA,0,MODE_EMA,PRICE_MEDIAN,0); )

当前价格(买入价或卖出价)与Ma(慢速MA)的偏差可以大于或小于Distans。根据这一点,你应该设置第一手或第二手大小。

我已经找到了根据存款或未平仓订单数量改变手数的变体,但我无法从这样的线性条款中得到任何回应。

直觉告诉我,我们需要一个返回绝对值的函数。也就是说,如果我们把它应用于一个负数,结果将是正数。

 
delf699:

买入价和卖出价是最后已知的买入价和卖出价,即当前价格。

SlowMA是我重新命名的马

(double SlowMA = iMA(NULL,60,periodSlowMA,0,MODE_EMA,PRICE_MEDIAN,0); )

当前价格(买入价或卖出价)与Ma(慢速MA)的偏差可以大于或小于Distans。根据这一点,你应该设置第一手或第二手大小。

我已经找到了根据存款或未平仓订单数量改变手数的变体,但我无法从这样的线性条款中得到任何回应。

直觉告诉我,我们需要一个返回绝对值的函数。也就是说,如果我们把它应用于一个负数,结果将是正数。


买入价和卖出价之差的绝对值稍后可能需要;现在,既然你还没有得到提示,让我们一起计算吧

买入价=1.12730。

MA=1.12530。

Distans = 20。

问题。

什么时候以及1.1273到1.1253是否会超过20?

由于某些原因,我的计算器只显示0.002。但这离20岁还有一段距离...

 

谢谢你,我明白了。或者你可以这样做。

距离=Distan*Point。

如果(Ask- SlowMA<dist)Lot == Lot1;
如果(SlowMA-Bid<dist)Lot == Lot1;
如果(Ask- SlowMA>dist)Lot == Lot2;
如果(SlowMA-Bid>dist) Lot == Lot2。

那么,我怎样才能正确地做到这一点呢?

 
delf699:

谢谢你,我明白了。或者你可以这样做。

距离=Distan*Point。

如果(Ask- SlowMA<dist)Lot == Lot1;
如果(SlowMA-Bid<dist)Lot == Lot1;
如果(Ask- SlowMA>dist)Lot == Lot2;
如果(SlowMA-Bid>dist) Lot == Lot2。

那么,我怎样才能正确地做到这一点呢?

现在我们可以使用MathAbs(),以便不通过跟踪什么被减去什么而使我们的大脑过度思考 还有一个有趣的条件运算符

Lot = MathAbs(Ask-SlowMA) < dist ? Lot1 : Lot2;


这意味着:如果Ask-SlowMA小于dist,Lot变量将被分配到Lot1的值,否则,Lot2的值将被分配。

还有一个建议:忘掉"点 "这个变量。使用_Point或Point()函数

 
谢谢你,一个美丽的解决方案。
 
我的眼睛已经坏了,我找不到哪里缺了括号,我得到的错误是'(' - 不平衡的左括号test.mq4 31 8(从调用TrendDetection()的那一行开始)。

我需要帮助,我还只是在学习......


#define BULL 1;
#define BEAR 2;

//--------------------------------------------------------------------
外部int SL = 200。
外部int TP = 200。
外来的双倍Lots = 0.01。
外置双倍 SarStep = 0.02;
外来的双倍 SarMaximum = 0.2。
外来的int slippage = 5;
外来的int Magic = 1;
外部int MaxOrder = 1;
string OrderComments = "Bargain 1.0;
int Cnt=0。
datetime PreviousBar;

int start()
{
Cnt=OrdersTotal()。
{
如果(Cnt<MaxOrder)
{
如果(NewBar() == true)
{
如果(TrendDetection() == BULL){
OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),slipage,NormalizeDouble(Ask,Digits)-(SL*Point),NormalizeDouble(Ask,Digits)+(TP*Point),OrderComments,Magic,0,CLR_NONE) ; }
如果(TrendDetection() == BEAR){
OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),slipage,NormalizeDouble(Bid,Digits)+(SL*Point), NormalizeDouble(Bid,Digits)-(TP*Point), OrderComments,Magic,0,CLR_NONE) ;}
}
}
否则
{return(0);}
}
return(0);
}

int TrendDetection()
{
double Sar = iSAR(NULL,0,SarStep,SarMaximum,1);
如果(Close[1] > Sar) {返回(BULL);}。
如果(Close[1] < Sar) {返回(BEAR);}。
return(0);}
bool NewBar()
{
如果(PreviousBar<Time[0])
{
PreviousBar = Time[0];
return(true)。
}
否则
{
return(false)。
}
return(false)。
}
 
AlexeyVik:

而现在你可以应用MathAbs(),这样你就不必跟踪从什么地方减去什么 还有一个有趣的条件运算符


这意味着:在Ask-SlowMA小于dist的情况下,Lot变量将被分配给Lot1的值,否则,Lot2的值将被分配。

还有一个建议:忘掉 "点 "这个变量。使用_Point或Point()函数

,一切似乎都在发挥作用呢?