PDA

View Full Version : 帮助“OrderSend error 4051”



pioxlay88
09-12-2015 13:38, 01:38 PM
大家好。我一直试图找出一段时间,但已经能够。一些帮助,这将是很好的。下面的代码是执行我的多头交易,但是我一直得到OrderSend函数的OrderSend错误4051无效金额。我尝试了各种方法,但似乎没有任何工作。通过在我的批量大小中使用此代码,我试图获得大小只会冒每个交易的百分比,但使用可变的止损作为参考。止损点从交易转变为交易,因为它是50烛后的最低点。如果你知道更好或更简单的方式,也将不胜感激。

编辑:我试图通过这样做将风险/资金管理纳入我的交易。

变量代码:
插入代码extern int Risk_Percent = 3;/我的帐户对每笔交易的风险百分比。 double LowestShift = iLowest(Symbol(),PERIOD_H1,MODE_LOW,50,1);/找回50烛光中最低的蜡烛。双最低= iLow(符号(),PERIOD_H1,LowestShift);/找到LowestShift double发现的蜡烛低点Buy_Take_Profit =((Bid-Lowest) Ask);/以1:1进行交易
执行代码:
插入代码if(Condition1 gt; Condition2){if(Condition3 lt; Condition4){if(Condition5 lt; Bid){if(getOpenOrders()== 0){double Buy_Lots = NormalizeDouble(((AccountBalance()*(Risk_Percent100))/(((BID-最低)* 100000)*(MarketInfo(符号(),MODE_TICKVALUE)))),2); Buy_Order = OrderSend(Symbol(),OP_BUY,Buy_Lots,Ask,30,Lowest,Buy_Take_Profit,NULL,2000,0,clrGreen); }}}}

aloxndokevin
09-30-2021 02:07, 02:07 AM
请按订单大小进行打印。插入的代码双重买入也确保它是更大的,然后你的经纪人允许它。例如,您可能希望发送0.005手,这是不可能的(MT4限制),或0.05,但您的经纪商需要0.1手。也可以使用股票,而不是余额,也可以查看免费保证金

pioxlay88
09-30-2021 03:28, 03:28 AM
感谢您的答复。我正在这样做,我会回来更多的信息。看起来Risk_Percent除以100的部分让我在打印中返回0。如果我将风险改为100,那么它会给我1.尽管它似乎不想给我一个小数。我会检查最小量,但我认为以上是错误的原因。仍然是一分钟和一个最大的不坏的事情来编程。我会改变它的公平。为什么我必须检查免费保证金?

notfeal
09-30-2021 04:48, 04:48 AM
感谢您的答复。我正在这样做,我会回来更多的信息。看起来Risk_Percent除以100的部分让我在打印中返回0。如果我将风险改为100,那么它会给我1.尽管它似乎不想给我一个小数。我会检查最小量,但我认为以上是错误的原因。仍然是一分钟和一个最大的不坏的事情来编程。我会改变它的公平。为什么我必须检查免费保证金?
Ernie11- Risk_Percent应定义为双重双重Risk_Percent = 0.30;/每笔交易的风险百分比。

pioxlay88
09-30-2021 06:09, 06:09 AM
感谢您的答复。我通过执行Risk_Percent * 0.01而不是Risk_Percent100来工作。不知道为什么一个人工作,另一个人不工作,他们都给出了相同的答案。如果我将Risk_Percent加倍,我将无法将其从输入框中更改为正确的值?它永远是一个固定值?我想实施一个特殊的追踪止损,但我也有一些困难。我希望它在OpenOrderPrice和Take_Profit之间达到X%时开始追踪止损。你可以看看它吗?粗体部分是我从正常的追踪止损中更改的唯一部分。变量:插入的代码extern int Start_Trailing_Stop_Percent = 70; extern int Trailing_Stop = 100; double LowestShift = iLowest(Symbol(),PERIOD_H1,MODE_LOW,50,1); double HighestShift = iHighest(Symbol(),PERIOD_H1,MODE_HIGH,50,1);双最低= iLow(符号(),PERIOD_H1,LowestShift); double Highest = iHigh(Symbol(),PERIOD_H1,HighestShift); double Buy_Take_Profit =((Bid-Lowest) Ask); double Sell_Take_Profit =(Bid-(Highest-Ask));追踪止损:插入代码为(int i = 0; ilt; OrdersTotal(); i ){//选择打开交易if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)== false){}/执行买入交易的追踪止损如果(OrderType()== OP_BUY OrderSymbol()== Symbol()){if(Trailing_Stopgt; 0){#91; b#93; if(Bidgt;((((Start_Trailing_Stop_Percent * 0.01)*(Buy_Take_Profit-OrderOpenPrice ))))) OrderOpenPrice()){#91;b#93; if(OrderStopLoss()lt; Bid-Point * Trailing_Stop){if(OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point * Trailing_Stop,OrderTakeProfit(),0,clrGreen)){return;如果(OrderType()== OP_SELL OrderSymbol()== Symbol()){if(Trailing_Stopgt; 0){#91; b#93; if() Asklt;(OrderOpenPrice() - ((((Start_Trailing_Stop_Percent * 0.01)*(OrderOpenPrice() - Sell_Take_Profit)))))){#91;b#93;如果((OrderStopLoss()gt;(Ask Point * Trailing_Stop))||(OrderStopLoss()== 0)){if(OrderModify(OrderTicket(),OrderOpenPrice(),Ask Point * Trailing_Stop,OrderTakeProfit() 0,clrRed)){return; }其他{}}}}}}

notfeal
09-30-2021 07:30, 07:30 AM
感谢您的答复。我通过执行Risk_Percent * 0.01而不是Risk_Percent100来工作。不知道为什么一个人工作,另一个人不工作,他们都给出了相同的答案。如果我将Risk_Percent加倍,我将无法将其从输入框中更改为正确的值?它永远是一个固定值?我想实施一个特殊的追踪止损,但我也有一些困难。我希望它在OpenOrderPrice和Take_Profit之间达到X%时开始追踪止损。你可以看看它吗?粗体部分...
Ernie11-是的,你可以在它前面添加外部。至于追踪止损,我不会考虑在没有整个EA代码的情况下进行操作。

pioxlay88
09-30-2021 08:51, 08:51 AM
1附件我将附上EA。所有这些都是我为了解决这个问题而付出的印花。我注意到买入逻辑中的OrderOpenPrice()与回测时的开盘价格不一样。感谢您花时间看看它。
https://www.forex-pedia.com/attachments/15276937042088120550.mq4

notfeal
09-30-2021 10:11, 10:11 AM
1附件(S)

我将附上EA。所有这些都是我为了解决这个问题而付出的印花。我注意到买入逻辑中的OrderOpenPrice()与回测时的开盘价格不一样。感谢您花时间看看它。 {文件}
Ernie11-我做了一些修改 - 似乎在ST工作。
https://www.forex-pedia.com/attachments/1527693705186796309.mq4

pioxlay88
09-30-2021 11:32, 11:32 AM
嗨cyber1。感谢您的帮助,我只是跑了一次,看它是否运行,它确实。我第一次实施资金管理部分时,会看到如何解决问题。这是为了帮助一个贸易不会比另一个贸易更大。

pioxlay88
09-30-2021 12:53, 12:53 PM
嗨cyber1。我注意到我得到了相当多的OrderModify 130来运行它。你知道为什么吗?此外,它将止损设置移动到%输入,但不会从那里跟踪它,我会尝试将这部分与您所写的内容相加。

pioxlay88
09-30-2021 14:14, 02:14 PM
嗨cyber1。我没有得到任何错误,并且在达到起始点(BEPoint)之后,按照您的要求追踪投标/问题。我确实有一个关于你的代码的问题。调用Trailing_Control的部分每个栏只激活一次?这意味着Stoploss每条只会更新一次?

notfeal
09-30-2021 15:34, 03:34 PM
嗨。我没有得到任何错误,并且在达到起始点(BEPoint)之后,按照您的要求追踪投标/问题。我确实有一个关于你的代码的问题。调用Trailing_Control的部分每个栏只激活一次?这意味着Stoploss每条只会更新一次?
Ernie11-是的,你是对的。你可以删除条件,如果你想,但它会检查每个滴答。你也是正确的,没有额外的追踪。你的帖子不清楚你想在最初的追踪止损之后做什么。

pioxlay88
09-30-2021 16:55, 04:55 PM
cyber1。好的谢谢。我从来没有想过每一次,整洁的想法更新一次。我喜欢自己编写尽可能多的代码,但是当我陷入困境时,我只会寻求帮助,继续前进。还有什么你认为我应该补充的,以帮助你能想到的资金管理部分?再次感谢你。