[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 599

 
alsu:
写下你得到了什么,以及你在日志中打印了什么信息。



我已经显示了它应该进入的地方,但它没有进入,应该检查什么分形。我还在档案中附上了代码和测试txt文件的输出(我改变了它,添加了我的,但问题仍然存在)。我只是诚实地甚至不知道应该监测什么变量(有一张位置的图片

)

附加的文件:
ik.zip  4 kb
 

我从另一个EA中提取了函数GetLot(在文件中)。 在我的旧EA中,本身没有错误,但在我的EA中,产生了

'(' -函数 定义意外 C:\Program Files\BCS Trade Station\experts\ SovetnikStochastic.mq4 (106, 15)
'Free' - 变量未定义 C:\Program Files\BCS Trade Station\experts\ SovetnikStochastic。mq4 (112, 28)
'Risk' - 未定义的变量 C:\Program Files\BCS Trade Station\experts\ SovetnikStochastic.mq4 (112, 33)
'Free' - 未定义的变量 C:\Program Files\BCS Trade Station\experts\ SovetnikStochastic.mq4 (115, 17)

有什么问题呢?

附加的文件:
 
为什么你们都这么喜欢存档者?你的源代码里有100500行代码吗!?
 

griha:

我从另一个EA中提取了函数GetLot(在文件中)。 在我的旧EA中,本身没有错误,但在我的EA中,产生了

'(' - 函数定义意外 C:\Program Files\BCS Trade Station\experts\ SovetnikStochastic.mq4 (106, 15)
'Free' - 变量未定义 C:\Program Files\BCS Trade Station\experts\ SovetnikStochastic。mq4 (112, 28)
'Risk' - 未定义的变量 C:\Program Files\BCS Trade Station\experts\ SovetnikStochastic.mq4 (112, 33)
'Free' - 未定义的变量 C:\Program Files\BCS Trade Station\experts\ SovetnikStochastic.mq4 (115, 17)

有什么问题?

在第一个If 之前,start函数的代码中有一个额外的大括号,这就是为什么会出现错误。为了便于阅读,你应该总是尽量把它们放在前面,然后把你需要的东西都写在里面。 更好的是,你应该把它们放在新的一行,并有一个偏移量,这样独立的块就不会被混淆(例如,像上一页给出的代码那样)

P.S. 。

我认为地段计算的公式是这样的

 double Lot     =MathFloor(Free*Risk/100/One_Lot/Step)*Step;    // откидываем лишние знаки после запятой, оставляем 2 знака
对于步长超过0.01的0.1手,将无法正常工作,也许我漏掉了什么,但那样的话,手数将永远等于0(MathFloor(900*2/100/1324/0.02=0.67975831)=0,所以0*步长=0)。
 

我不知道如何计算类似于OrderProfitPips( )的东西,对于一个选定的订单,如果该货币对是任意的。也就是以点为单位的利润,而不是以账户货币为单位。

我需要准确的点数 - 分析不同货币对的多货币交易的有效性。我需要四位数的点数(或适当的两位数,如果该货币对是日元)。考虑到账户货币为美元,合同规模为100 000单位。

如果该货币对是欧元兑美元,一切都很简单。

pips = OrderProfit( ) / ( OrderLots( ) * 10. );


如果货币对是澳元兑瑞郎,情况就有点复杂了。如果该账户是一个法郎账户,其公式将完全相同。但该账户是一个法郎账户,即OrderProfit()以美元返回。所以我的利润应该换成法郎。

pips = USDCHF * OrderProfit( ) / ( OrderLots( ) * 10. );

对吗?

 
Mathemat:

我不知道如何计算类似于OrderProfitPips( )的所选订单,如果该货币对是任意的。也就是以点为单位的利润,而不是以账户货币为单位。

我需要准确的点数 - 分析不同货币对的多货币交易的有效性。我需要四位数的点数(或适当的两位数,如果该货币对是日元)。考虑到账户货币为美元,合同规模为100 000单位。

如果货币对是欧元兑美元,一切都很简单。

pips = OrderProfit( ) / ( OrderLots( ) * 10. );


如果货币对是澳元兑瑞郎,情况就有点复杂了。如果该账户是一个法郎账户,其公式将完全相同。但该账户是美元账户,即OrderProfit()以美元返回。所以我的利润应该换成法郎。

pips = USDCHF * OrderProfit( ) / ( OrderLots( ) * 10. );

对吗?


你读过http://www.fxtrademaker.com/fx_calculation.htm 或者是http://thismatter.com/money/forex/leverage-margin-pips.htm?

据我所知,对于欧元兑美元,PipProfit = USDprofit/lot/Point。对于反向报价的货币对,我们需要取开盘价和当前价之间的差额并乘以Digits:Pips = OrderOpenPrice()-Bid*Digits_coefficient; 其中
Digits_coefficient = MathPow(10,Digits);


 

是的,这两个链接似乎都有用途。谢谢你。

P.S. 我决定不以点计算,而是以账户货币计算。日元交叉盘的点数与通常的点数太不相称了。而我想把它们加起来(当然是按惯例)......

 
Mathemat:

是的,这两个链接似乎都有用途。谢谢你。

P.S. 我决定不以点计算,而是以账户货币计算。日元交叉盘的点位数字与通常的点位数字太不相称了。而我想把它们加起来(当然是有条件的)...


点子就是点子,怎么可能不成正比?欧元兑美元的20点利润与日元的20点利润有什么不同?你一定是数错了...但是用账户的货币来计算确实比较容易。

 
evillive: 点子就是点子,它们怎么可能不相干呢?

那么,在你的链接(第二条)上,一切都可以看到。

你买入100,000 单位的欧元/日元=164.09,当欧元/日元=164.10美元/日元=121.35 时卖出。

以日元为单位的利润=164.10-164.09=.01日元=1点 (记住日元的例外: 1日元点=0.01日元。)

以日元为单位的总利润=1 x100,000=100,000点
总利润以日元计=100,000点/100=1,000日元

因为你只有美元/日元=121.35 的报价,为了得到美元的利润,你要除以报价货币的转换率。

总利润(美元)=1,000/121.35=8.24美元。

如果你只有这个报价,JPY/USD=0.00824,相当于上述数值,你用以下公式将日元的点数转换为本国货币。

总利润(美元)=1,000 x0.00824= 8.24美元。

在这个例子中,8.24美元的利润(相当于1手欧元兑美元的0.824个点)相当于 10万个 日元的点数

P.S. 我觉得自己是个十足的新手......

 
Mathemat:

嗯,你的链接(第二个)显示了这一切。

8.24美元的利润(相当于1手欧元兑美元的0.824个点)相当于 十万个 日元的点!这也是一个很好的例子。


你读错了。对于有反向报价的货币对,取开盘价 和当前 之间的差额,并乘以从Digits获得的乘数 ( Pips = (Bid -OrderOpenPrice())*Digits_coefficient; ) ,这样就可以得到(80.60-80.45=0.15) * MathPow(10,Digits) = 15点,其中

Digits_coefficient  = MathPow(10,Digits);

再简单不过了,不是吗?

P.S.: 虽然没有,但可以更简单))))。

 Pips = (Bid - OrderOpenPrice())/Point; //ордер лонг
 Pips = (OrderOpenPrice() - Ask)/Point; //ордер шорт

而且这种表达方式对所有货币对都是正确的!