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

 
Tsaryoff5614:

下午好,各位程序员!!!。

请帮助一个新手的功能。

该函数按历史统计总利润。

问题是,它对一个经纪商有效,而对另一个经纪商却不愿意工作。

它在Hercic上工作,但在RoboForex上没有。我在RoboForex有一个ECN账户。

我不知道问题出在哪里。以下是代码。

double lastloss()

{

int typ = -1,cnt = 0;

double lastloss = 0;

for(int i = OrdersHistoryTotal()-1; i>=0; i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

{

如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)

{

if(cnt == 0) typ = OrderType();

if(cnt > 0 && OrderType()!= typ) break;

Lastlos += OrderProfit() + + OrderSwap() + OrderCommission()。

cnt++。

}

}

}

return(lastlos)。

}

我想知道编译器是否不在这一行发誓?

lastlos += OrderProfit() + + OrderSwap() + OrderCommission();

也许需要去掉一个+,它才能正常工作?

而你为什么要在利润中加入互换和佣金?尽管
OrderProfit()

也可能是负面的...

而如果你只处理1个或几个匹配的订单,而不是所有的订单,我们所说的总利润是什么样的?

下一步。

 if(cnt > 0 && OrderType()!= typ) break;

循环停顿。

 
MakarFX:

1)在高速状态下,或者如果在测试器中不在ticks上,它将在第一个可用的价格上关闭。

2)你有大量的增加,而在大量的情况下,1分可能超过了允许的水平。

3)我不明白你想要什么,如果每次交易后归零,你需要跟踪什么?

3)我不明白如果每次交易后清零,你想追踪什么?

我说的是跟踪每笔交易 "内部 "的盈亏情况,也就是说,当价格在止损和止盈之间 "徘徊 "时,当前交易的盈亏数额也在变化。经常发生的情况是,价格来到盈利区,但没有达到拿货点--它掉头,交易在止损点关闭。我需要追踪利润和损失(以货币计),以便能够在不转移止损点的情况下及时修复,即不破坏设定的止损点参数。这对于有一个启用的马丁的大地段来说是相关的。

当一笔交易结束时 - 追踪停止,重新开始新的交易。

 
законопослушный гражданин:

3)我不明白如果每次交易后清零,你想追踪什么?

我说的是跟踪每笔交易 "内部 "的盈亏情况,即当价格在止损和止盈之间 "摇摆不定 "时,当前交易的盈亏数额会发生变化。经常发生的情况是,价格来到盈利区,但没有达到拿货点--它掉头,交易在止损点关闭。我需要追踪利润和损失(以货币计),以便能够在不转移止损点的情况下及时修复,即不破坏设定的止损点参数。这对于有一个启用的马丁的大地段来说是相关的。

当一个交易被关闭时,跟踪停止,并重新开始新的交易。

你只需要指定减去止损和止盈的利润和亏损参数,即

如果TakeProfit是200点0.1手,那么利润是20美元,设置利润水平为15美元,交易将提前结束。

 
Mihail Matkovskij:

而你为什么要在利润中加入有佣金的掉期?与
OrderProfit()

也可以是负面的...

谢谢你,我也一直在做这件蠢事

 
MakarFX:

你所要做的就是指定减去止损和止盈的盈亏参数,即

如果TakeProfit是200点0.1手,那么利润是20美元,设置利润水平为15美元,交易将提前结束


好的,谢谢,我会考虑一下,并在测试器中运行它。

 
你是否有一个链接,可以链接到一个根据订单历史 计算利润的函数?
 

我请求社区的帮助...
如何正确声明和创建MQL5全局对象?

如果我这样做。

int OnInit()
{
   CIsNewBar* NB_M1=new CIsNewBar(_Symbol,PERIOD_M1);  // Эта строка потом будет в цикле для разных символов
}

void OnTick()
{
    if (NB_M1.IsNewBar())  // (1) Если появился новый бар M1
        {....}
    ......
}

编译器抱怨OnTick()中的一行:'NB_M1' - 未声明的标识符,这是符合逻辑的,因为在OnInit()中创建了一个局部变量。

如果你在OnInit()之前插入全局声明。

CIsNewBar* NB_M1;

它的编译没有错误,专家也能工作。似乎对象被创建了两次--在全局声明和OnInit()中。
编译器的警告,有这样的内容。

NB_M1 "的声明隐藏了全局变量->OnInit()的每一行。

见之前的'NB_M1'声明

这是否意味着在OnInit()中创建了一个局部变量(在一个函数内),隐藏了一个同名的全局变量?
如果是这样,这个局部变量如何能被另一个函数OnTick() "看到"?


 
MakarFX:

谢谢你,我也做过这种蠢事。

马卡尔,你以前做的是正确的事,现在你想做愚蠢的事......

回想一下你五年级左右的数学课吧。(-3)-(-7)是多少,(-3)+(-7)是多少?

在计算器上很难检查,Excell来帮助你。


 
Mihail Matkovskij:
你好。你知道在MQL中是否有任何可用的库,用于将数据结构 写入文件并在之后加载它们?理想情况下是一个能与json格式、json 解析器等一起工作的库。

我不知道该如何告诉你去阅读文件。如果你读了它,而标准功能由于某种原因不适合,你应该直接说出来......

 
Alexey Viktorov:

马卡尔,你以前做的是正确的事,现在你想做愚蠢的事......

回想一下你五年级左右的数学课吧。(-3)-(-7)是多少,(-3)+(-7)是多少?

在计算器上很难检查,Excell来帮助你。


是的,谢谢你。我匆匆下了结论。我说对了)