通用MA交叉EA - 页 106

 
BlackCoq:
问题是,我在马丁格尔系统中使用了非常类似的代码,效果非常好。 既然它对马丁格尔系统有效,现在不也应该有效吗?

试试使用类似这样的东西。

double GetLastPL()

{

double TempLastOrderProfit = 0;

datetime CloseTime = 0;

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

{

if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)

{

CloseTime = OrderCloseTime();

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

}

}

return(TempLastOrderProfit);

}

它将返回你最后一笔订单的准确利润(或损失)金额。

 
mladen:
试试用这样的方法:它将返回最后一笔订单的准确利润(或损失)金额

谢谢你的帮助,姆拉登。我对代码进行了一些调整,直到我得到了没有任何错误的编译,但EA仍然在亏损后停止并反转。这就是我现在使用的确切代码。

{

double TempLastOrderProfit = 0;

datetime CloseTime = 0;

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

{

如果(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

如果(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime() >CloseTime)

{

CloseTime = OrderCloseTime()。

}

}

如果(StopAndReverse==true && subTotalTrade()>0 && OrderProfit()>0)

{

if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true))

{

subCloseOrder();

如果(subTotalTrade()>0) subCloseOrder();

如果(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !");

}

}

}

double GetLastPL() 给我带来了以下错误:'(' -函数 定义意外。

 
BlackCoq:
谢谢你的帮助,Mladen。我对代码进行了一些调整,直到我得到了没有任何错误的编译,但EA仍然在亏损后停止并反转。这就是我现在使用的确切代码。 double GetLastPL() 给我带来以下错误:'(' - 函数定义出乎意料。

黑库克

你必须在循环中进行所有的逻辑比较,因为像OrderProfit()这样的函数是从一个封闭的订单列表中返回当前选择的订单 的利润。如果不在主循环内(for(int i=OrdersHistoryTotal()-1;i>=0;i--)),那么只有最后选择的订单会被测试,但这并不意味着它是最后一个订单(metaquotes在其文档中明确指出,已关闭(或仍在打开)的订单列表中的订单不一定是任何特定的顺序 - 这是代码员的责任,以检查顺序。)

 
mladen:
BlackCoq 你必须在循环中进行所有的逻辑比较,因为像OrderProfit()这样的函数是在关闭订单的列表中返回当前所选订单的利润。如果不在主循环内(for(int i=OrdersHistoryTotal()-1;i>=0;i--)),那么只有最后选择的订单将被测试,但这并不意味着它是最后一个订单(metaquotes在其文档中明确指出,已关闭(或仍在打开)的订单列表中的订单不一定是任何特定顺序 - 这是代码员的责任,以检查顺序。)

在这个看似简单的任务失败了许多小时后,我决定在继续之前多学习一些编程。无论如何,感谢您的帮助!

当我试着这样做的时候,EA根本就不会开出任何头寸。

{ double TempLastOrderProfit = 0; datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) { CloseTime = OrderCloseTime(); } } { if(StopAndReverse==true && subTotalTrade()>0 && OrderProfit()>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }[/PHP]

And with this, it would "stop and reverse" even if last trade was a loss:

[PHP] { double TempLastOrderProfit = 0; datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) { CloseTime = OrderCloseTime(); TempLastOrderProfit = OrderProfit() + OrderSwap()+ OrderCommission(); } } return(TempLastOrderProfit); { if(StopAndReverse==true && subTotalTrade()>0 && TempLastOrderProfit>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }

再次感谢您。

 
BlackCoq:
在这个看似简单的任务失败了许多小时后,我决定在继续之前多学习一些编程。谢谢你的帮助!

当我尝试这样做的时候,EA根本就不会开出任何头寸。

{ double TempLastOrderProfit = 0; datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) { CloseTime = OrderCloseTime(); } } { if(StopAndReverse==true && subTotalTrade()>0 && OrderProfit()>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }[/PHP]

And with this, it would "stop and reverse" even if last trade was a loss:

[PHP] { double TempLastOrderProfit = 0; datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) { CloseTime = OrderCloseTime(); TempLastOrderProfit = OrderProfit() + OrderSwap()+ OrderCommission(); } } return(TempLastOrderProfit); { if(StopAndReverse==true && subTotalTrade()>0 && TempLastOrderProfit>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }
再次感谢您。

BlackCoq

如果你按原样使用我发布的函数,它将返回最后一个平仓订单的准确利润(不需要改变其中的任何内容)。

 
mladen:
BlackCoq 如果你按原样使用我发布的函数,它将返回你最后一笔平仓订单的准确利润(不需要改变其中的任何内容)。

当我试图复制这个函数 时,无论我如何调整,都会出现许多错误。

这段代码。

{

double GetLastPL()

{

double TempLastOrderProfit = 0;

datetime CloseTime = 0;

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

{

如果(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

如果(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime() >CloseTime)

{

CloseTime = OrderCloseTime();

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

}

}

return(TempLastOrderProfit)。

{

如果(StopAndReverse==true && subTotalTrade()>0 && TempLastOrderProfit>0)

{

if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true))

{

subCloseOrder();

如果(subTotalTrade()>0) subCloseOrder();

如果(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !");

}

}

}

}

给我带来了错误。

编译'universalMAcrossECNmartingaleSAR.mq4' ...

'(' - 函数定义出乎意料 (538, 20)

'TempLastOrderProfit' - 变量未定义 (548, 15)

'TempLastOrderProfit' - 未定义的变量 (551, 15)

'TempLastOrderProfit' - 未定义的变量 (553, 52)

 
BlackCoq:
当我试图复制这个函数时,无论我如何调整,都会出现许多错误。

这个代码。

{ double GetLastPL() { double TempLastOrderProfit = 0; datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) { CloseTime = OrderCloseTime(); TempLastOrderProfit = OrderProfit() + OrderSwap()+ OrderCommission(); } } return(TempLastOrderProfit); { if(StopAndReverse==true && subTotalTrade()>0 && TempLastOrderProfit>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }[/PHP]

Gives me the errors:

[PHP]

Compiling 'universalMAcrossECNmartingaleSAR.mq4'... '(' - function definition unexpected (538, 20)'TempLastOrderProfit' - variable not defined (548, 15)'TempLastOrderProfit' - variable not defined (551, 15)'TempLastOrderProfit' - variable not defined (553, 52)

黑库克

函数 必须粘贴在任何其他函数之外。这里有一个非常简单的ea,显示了它是如何工作的,以及应该如何使用它

附加的文件:
 
mladen:
BlackCoq 该函数必须粘贴在任何其他函数之外。下面是一个非常简单的EA,显示了它是如何工作的以及应该如何使用它

我确信我在这里错过了什么,但即使我试图在EA中的任何其他函数之外复制该函数,我仍然得到以下错误。

'(' - 函数定义意外(在双倍GetLastPL() 之后)

'TempLastOrderProfit' - 变量未定义 (554, 15)

'TempLastOrderProfit' - 变量未定义 (557, 15)

 
BlackCoq:
我确信我错过了什么,但即使我试图在EA的任何其他函数之外复制该函数,我仍然得到以下错误。

'(' - 函数定义出乎意料(在双倍GetLastPL() 之后)

'TempLastOrderProfit' - 未定义变量 (554, 15)

TempLastOrderProfit' - 未定义变量 (557, 15)

对不起,但没有你的代码,我不知道你在做什么。

你可以从该测试EA中看到,它的工作完全没有问题。

 
mladen:
对不起,没有你的代码,我不知道你在做什么,你可以从测试的EA中看到,它工作起来一点问题都没有。

当我试图编译你所附的EA时,我也得到了几个错误。我们使用的是不同版本的MT4吗?

我附上了我试图在 "停止和逆转 "之前添加功能 的EA。

附加的文件: