如何在 MQL4 / MT4 中对很多指数进行分组?
How to group a lot exponent in MQL4 / MT4?
我设法得到了正常的手数指数,但我需要通过图片中的分组示例对其进行一些更改。有人可以指导我如何使用分组技术获得手数指数 Group=5 Exponent=1.8?
double GroupExponent(int type)
{
double lot=0,exponent=1.8,group=5,initialLot=0.01;
if(type==OP_SELL)
............. //<---- Do i need to loop this area ?
lot= initialLot * MathPow(exponent,TotalSell());
return lot;
}
int TotalSell()
{
int Sell=0;
for(int trade=OrdersTotal()-1; trade>=0; trade--)
{
if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))continue;
if(OrderSymbol()==Symbol() && OrderType()==OP_SELL))
Sell++;
}
return Sell;
}
Q : "How to group a lot exponent in MQL4 / MT4?"
嗯,从技术上讲,指数 = 1.8 本身并不是指数,而是一个比例常数,即 按普通序数取幂。
看Lot-sizings的计算公式,符合上面的Table:
|
|>>> for aLayerNUMBER in range( 1, 11 ):
... aVolumeInLOTs = 0.01 * ( 1.8 ** ( aLayerNUMBER - 1 ) )
... print "LAYER: {0: >2d} - {1: >5.2f} Lots".format( aLayerNUMBER,
... aVolumeInLOTs
... )
...
LAYER: 1 - 0.01 Lots
LAYER: 2 - 0.02 Lots
LAYER: 3 - 0.03 Lots
LAYER: 4 - 0.06 Lots
LAYER: 5 - 0.10 Lots
LAYER: 6 - 0.19 Lots
LAYER: 7 - 0.34 Lots
LAYER: 8 - 0.61 Lots
LAYER: 9 - 1.10 Lots
LAYER: 10 - 1.98 Lots
+0:01:07.587141
13:31:06
|
|>>>
在 MQL4 中会有,最常见的是:
double aVolumeInLOTs = NormalizeDouble( 0.01 * MathPow( 1.8, aLayerNUMBER - 1 ), 2 );
分组是(此处)5 笔交易的组,每笔交易的规模/交易量相同,
再次以指数级数(0.01、0.02、0.03、0.06、0.10、0.19、0.34、 0.61, 1.10, 1.98, 3.57, 6.42, 11.56, 20.82, 37.48, 67.46, 121.43, 218.59, 393.46, ... )
拼图的最后一块是一个原因,在哪里停止产生 5 次交易的组(为什么在第四组 5-s 停止,每组大小为 0.06 手,而不继续进行任何其他操作).
该信息未出现在问题中,因此显然对我们来说仍然是无法确定的,除非添加了更多信息。
不,您不需要周期。您可以像这样获得图层系统:
double GroupExponent(int type)
{
double lot=0,exponent=1.8,initialLot=0.01;
int group = 5;
if(type==OP_SELL)
{
lot = NormalizeDouble(initialLot * MathPow(exponent, (TotalSell() - 1) / group), 2);
}
return lot;
}
int TotalSell()
{
int Sell=0;
for(int trade=OrdersTotal()-1; trade>=0; trade--)
{
if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))continue;
if(OrderSymbol()==Symbol() && OrderType()==OP_SELL))
Sell++;
}
return Sell;
}
注意:只有当 Layer == 1
等于 TotalSell() == 1
时,这才会按预期工作。如果Layer == 1
等于TotalSell() == 0
,那么MathPow()
里面的TotalSell()
就不需要减1了。
我设法得到了正常的手数指数,但我需要通过图片中的分组示例对其进行一些更改。有人可以指导我如何使用分组技术获得手数指数 Group=5 Exponent=1.8?
double GroupExponent(int type)
{
double lot=0,exponent=1.8,group=5,initialLot=0.01;
if(type==OP_SELL)
............. //<---- Do i need to loop this area ?
lot= initialLot * MathPow(exponent,TotalSell());
return lot;
}
int TotalSell()
{
int Sell=0;
for(int trade=OrdersTotal()-1; trade>=0; trade--)
{
if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))continue;
if(OrderSymbol()==Symbol() && OrderType()==OP_SELL))
Sell++;
}
return Sell;
}
Q : "How to group a lot exponent in MQL4 / MT4?"
嗯,从技术上讲,指数 = 1.8 本身并不是指数,而是一个比例常数,即 按普通序数取幂。
看Lot-sizings的计算公式,符合上面的Table:
|
|>>> for aLayerNUMBER in range( 1, 11 ):
... aVolumeInLOTs = 0.01 * ( 1.8 ** ( aLayerNUMBER - 1 ) )
... print "LAYER: {0: >2d} - {1: >5.2f} Lots".format( aLayerNUMBER,
... aVolumeInLOTs
... )
...
LAYER: 1 - 0.01 Lots
LAYER: 2 - 0.02 Lots
LAYER: 3 - 0.03 Lots
LAYER: 4 - 0.06 Lots
LAYER: 5 - 0.10 Lots
LAYER: 6 - 0.19 Lots
LAYER: 7 - 0.34 Lots
LAYER: 8 - 0.61 Lots
LAYER: 9 - 1.10 Lots
LAYER: 10 - 1.98 Lots
+0:01:07.587141
13:31:06
|
|>>>
在 MQL4 中会有,最常见的是:double aVolumeInLOTs = NormalizeDouble( 0.01 * MathPow( 1.8, aLayerNUMBER - 1 ), 2 );
分组是(此处)5 笔交易的组,每笔交易的规模/交易量相同,
再次以指数级数(0.01、0.02、0.03、0.06、0.10、0.19、0.34、 0.61, 1.10, 1.98, 3.57, 6.42, 11.56, 20.82, 37.48, 67.46, 121.43, 218.59, 393.46, ... )
拼图的最后一块是一个原因,在哪里停止产生 5 次交易的组(为什么在第四组 5-s 停止,每组大小为 0.06 手,而不继续进行任何其他操作).
该信息未出现在问题中,因此显然对我们来说仍然是无法确定的,除非添加了更多信息。
不,您不需要周期。您可以像这样获得图层系统:
double GroupExponent(int type)
{
double lot=0,exponent=1.8,initialLot=0.01;
int group = 5;
if(type==OP_SELL)
{
lot = NormalizeDouble(initialLot * MathPow(exponent, (TotalSell() - 1) / group), 2);
}
return lot;
}
int TotalSell()
{
int Sell=0;
for(int trade=OrdersTotal()-1; trade>=0; trade--)
{
if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))continue;
if(OrderSymbol()==Symbol() && OrderType()==OP_SELL))
Sell++;
}
return Sell;
}
注意:只有当 Layer == 1
等于 TotalSell() == 1
时,这才会按预期工作。如果Layer == 1
等于TotalSell() == 0
,那么MathPow()
里面的TotalSell()
就不需要减1了。