编码帮助 - 页 157

 
mladen:
克里斯托夫

这样一来,小数变量应该是可以的

在任何情况下,请检查在订单(部分)关闭不成功的情况下,你得到的错误代码是什么?

Mladen,

谢谢你的提示。

问题是,没有错误信息。当它不工作时,似乎PartialTP函数 甚至没有被调用。其他时候--通常是在EA重启后的第一笔订单--工作良好。

我想也许其中一个变量没有回到零值,或类似的东西,但我仍然找不到这个错误。

 
chrisstoff:
Mladen,

谢谢你的提示。

问题是,没有错误信息。当它不工作时,似乎PartialTP函数甚至没有被调用。其他时候--通常是在EA重启后的第一个订单--它工作得很好。

我想也许有一个变量没有回到零值,或者类似的东西,但我还是找不到这个错误。

克里斯托夫

抱歉,但对于部分代码我无法提供更多帮助

你所描述的情况意味着需要对代码进行调试,而这只能通过在使用某种控制点 的情况下执行代码来实现。

 
mladen:
chrisstoff

很抱歉,但对于部分代码,我无法提供更多帮助

你所描述的情况意味着有必要对代码进行调试--而这只能通过在使用某种控制点的情况下执行代码来实现

谢谢你,Mladen。

令人欣慰的是,你没有发现代码中的问题。

我想代码的所有相关部分都已经发布了,所以我必须在其他地方找到这个错误。

 
mladen:
hock87

请阅读你上面的帖子,了解该问题的解决方案

该问题的完整代码如下。

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

Malden,

如果我想账户余额 的一定比例开出手数,该如何编码?

例如。

我的账户余额为500美元。

我想以5%的比例开仓,然后自动计算并开仓0.25美元的手,TP=10 SL=20。

如何进行编码?

谢谢。

 
hock87:
马尔登。

如果我想按账户余额的某一百分比开出手数,如何编码?

例如。

我的账户余额为500美元。

我想以5%的比例开仓,然后自动计算并开仓0.25美元的手,TP=10 SL=20。

如何编写代码?

谢谢。

你可以用这样的函数 来实现。

double getLots(double stopLoss, double risk)

{

RefreshRates();

double pPoint = MarketInfo(Symbol(),MODE_POINT);

double step = MarketInfo(Symbol(),MODE_LOTSTEP);

double minLot = MarketInfo(Symbol()l,MODE_MINLOT);

double maxLot = MarketInfo(Symbol(),MODE_MAXLOT);

double lots = minLot;

if (risk>0 && stopLoss>0)

{

lots = AccountFreeMargin()*(risk/100.0)/(stopLoss*MarketInfo(s_symbol,MODE_TICKVALUE)/pPoint);

}

}

return(MathMax(MathMin(lots,maxLot),minLot));

}

PS: stopLoss必须以点/分的形式传递给函数(不是整数)。

 
mladen:
你可以用这样的函数来实现。
double getLots(double stopLoss, double risk)

{

RefreshRates();

double pPoint = MarketInfo(Symbol(),MODE_POINT);

double step = MarketInfo(Symbol(),MODE_LOTSTEP);

double minLot = MarketInfo(Symbol()l,MODE_MINLOT);

double maxLot = MarketInfo(Symbol(),MODE_MAXLOT);

double lots = minLot;

if (risk>0 && stopLoss>0)

{

lots = AccountFreeMargin()*(risk/100.0)/(stopLoss*MarketInfo(s_symbol,MODE_TICKVALUE)/pPoint);

}

}

return(MathMax(MathMin(lots,maxLot),minLot));

}

PS: stopLoss必须以点/分的形式传递给函数(不是整数)。

谢谢你,姆拉登。

但我未能将代码复合为买单代码。

它出现了许多错误和警告。

如何复合它?

谢谢。

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int start()

{

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}
 
hock87:
谢谢你,Mladen。

但我未能将代码复合为买单代码。

它出现了许多错误和警告。

如何复合它呢?

谢谢。

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int start()

{

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}

试着这样做(我现在已经测试过了,它是有效的)。

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int init() { return(0); }

int deinit() { return(0); }

int start()

{

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point*MathPow(10,Digits%2));

prof=(Ask+profsize*Point*MathPow(10,Digits%2));

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}
附加的文件:
_test_1.mq4  1 kb
test_1.gif  78 kb
 

亲爱的mladen和先生的工具,请。

是否有可能创建一个基于某些条件的EA,如3或4个指标满足预定条件的信号。

例如

我想让EA发出买入信号。

ema 8 cross ema 21

QQE高于0

非滞后MA为绿色

蜡烛在一目连云图 之上

EA不应该打开交易,而只是在满足所述条件时给出信号。

 

谢谢你,姆拉登。

我已经试过了。

但它仍然以0.1美元的价格开仓

我想以我的账户余额 的一定比例开出手数

例如:账户余额为500美元。

开了一个5%的手数,然后它自动计算并开了0.25美元的手,TP=10 SL=20。

LotSizeSlot1 = AccountBalance() * (RiskSlot1 / 100)

LotSizeSlot1 = $500*(5%/100)

LotSizeSlot1 = 0.25美元

然后它自动打开0.25美元的手,TP=10 SL=20。

如何创建它?

谢谢。

 
hock87:
谢谢你,Mladen。

我已经试过了。

但它仍然以0.1美元开出手数。

我想按照我的账户余额的一定比例开出手数

例如:账户余额为500美元。

以5%的比例开出手数,然后自动计算并开出0.25美元的手数,TP=10 SL=20。

LotSizeSlot1 = AccountBalance() * (RiskSlot1 / 100)

LotSizeSlot1 = $500*(5%/100)

LotSizeSlot1 = 0.25美元

然后它自动打开0.25美元的手,TP=10 SL=20。

如何创建它?

谢谢。

像附件中的那样

附加的文件:
_test_2.mq4  2 kb
原因: