pral=StopLossLastPos(sy,OP_BUY,-1) ; // цена по StopLoss последнего открытого BUY на покупку BUYLIMIT
pras=TakeProfitLastPos(sy,OP_BUY,-1); // цена по TakeProfit последнего открытого BUY на покупку BUYSTOP
prbl=StopLossLastPos(sy,OP_SELL,-1); // цена по StopLoss последнего открытого SELL на продажу SELLLIMIT
prbs=TakeProfitLastPos(sy,OP_SELL,-1) ;// цена по TakeProfit последнего открытого SELL на продажу SELLSTOP
pral=StopLossLastPos(sy,OP_BUY,-1) ; // цена по StopLoss последнего открытого BUY на покупку BUYLIMIT
pras=TakeProfitLastPos(sy,OP_BUY,-1); // цена по TakeProfit последнего открытого BUY на покупку BUYSTOP
prbl=StopLossLastPos(sy,OP_SELL,-1); // цена по StopLoss последнего открытого SELL на продажу SELLLIMIT
prbs=TakeProfitLastPos(sy,OP_SELL,-1) ;// цена по TakeProfit последнего открытого SELL на продажу SELLSTOP
我不明白我在市场订单中开了一行,我把它复制并添加一个新的订单,但同样的4107错误不起作用,如果你愿意看看我错过了什么
我不明白,我在市场订单开盘时有这一行,我把它复制到一个挂单中,并添加一个新的订单,但同样的4107错误仍然写到日志中,但挂单被放,如果你愿意看一下我错过了什么。
你的代码组织得太差了。而且变量名称有缩写,也让人看不明白。
代码应以区块形式组织。以这样的方式为变量赋名,让人一目了然地了解代码的内容。不变的名字(养成习惯)用大写字母书写。带值的常量初始化必须放在初始化块中。因此,例如,你有一个绝对不合理的字符串的使用
string sy = Symbol();
在EA的开始。那么,请告诉我,如果在整个交易过程中,符号名称保持不变,为什么在每一个刻度上都需要调用 Symbol()函数?在初始化块中用变量sy的值初始化一次就够了,仅此而已。此外,这个代码块
这从根本上说是错误的!要想知道最后一个订单的止损,必须先用OrderSelect()选择它(该订单)--见下面订单计数器中的例子。这意味着,如果你需要最后一个订单的止损位,你将需要通过一个循环来完成。下一步。的设计
是没有道理的。函数OrdersTotal()将返回终端中已经打开的订单总数。这个值包括由其他交易工具开出的订单,以及不是由专家顾问开出的,而是由您个人对同一工具手动开出的订单,而专家顾问已经下了这些订单。
如果你不打算用手交易,只交易EA抛出的符号,那么这种设计就可以了。但只要你想用手交易,而EA又不干扰你的手动交易,或者你希望交易也能用其他符号执行,这个设计就真的让你失望了。所以你最好为每种订单类型编写单独的订单计数器。下面是这样一个计数器的例子。
考虑到上述建议,重写代码!!!
对不起,我没有意识到,像这样的字符串
调用一个子程序。
但还是要以不同的方式来组织它。
>> double StopLossLastPos(string sy="", int op=-1, int mn=-1) {
你不需要把一个交易符号的名称传到子程序中。你的子程序是在专家顾问中,而不是在包含的库中。由于变量sy是在Expert Advisor的全局层面上声明的,所以这个变量是在这类子程序的范围内。此外,你把第二个参数传给子程序,但当你调用子程序本身时,你用一个值初始化这个参数(int op=-1)--你不需要这样做。下一个参数的情况也是如此。
航线
>> 如果(op<0 || OrderType()==op) {
又是无法阅读。看看在我的柜台里是如何组织的!
然后是这个。代码块
在每次打勾时都会被调用。但并不是每次打勾都需要这样做。在某些情况下,你只需要知道止损/获利订单。这时你需要调用你的子程序。
你好,请你在指标上附加一个警报(绿色的与红色的从上到下交叉 - 卖出,返回 - 买入)?
好吧,有人又在论坛上发布偷来的代码。:))))))))
我怀疑是否有人愿意免费挖掘这些杂乱无章的数字变量 :)
下午好,请您为火鸡添加一个警报(绿色的从上到下穿过红色的--卖出,回来--买入)?
如果你再这样做,我将被迫把你驱逐出游戏。
这违反了论坛规则。
对不起,我没有意识到,像这样的字符串
调用一个子程序。
但还是要以不同的方式来组织它。
>> double StopLossLastPos(string sy="", int op=-1, int mn=-1) {
你不需要把一个交易符号的名称传到子程序中。你的子程序是在专家顾问中,而不是在包含的库中。由于变量sy是在Expert Advisor的全局层面上声明的,所以这个变量是在这类子程序的范围内。接下来,你向子程序传递第二个参数,但当你调用子程序本身时,你用一个值初始化这个参数(int op=-1)--你不需要这样做。下一个参数的情况也是如此。
航线
>> 如果(op<0 || OrderType()==op) {
又是无法阅读。看看它在我的柜台里是如何被组织的!
所以我猜想,函数调用 可以简单地写成
PrAskLim = StopLossLastPos(OP_SELL); 在函数本身中
double StopLossLastPos(int op=-1,) 像这样?
我已经说过,我从这个网站上取来的函数,它们的工作已经经过了测试,因为我不敢把它们的变量改成更可读的变量,因为我可能缺乏经验,不知道什么可以改,什么不能改;这充满了危险,我可能在一个工作的函数中改错了什么,你会在一堆代码中重新针锋相对。
但我尽可能地修复我自己添加的东西。
我自己已经添加了它,但它没有解决我的日志4107的问题,我不得不问我如何能改变价格和止损,因为我没有从根本上改变它的任何东西。
第二个问题是如何在这个价格上增加一个价差 PrAskLim = StopLossLastPos(OP_SELL) ; (Spread =MarketInfo(sy, MODE_SPREAD); )
以下是该EA的修改版本
该代码是否应该被张贴?
你不需要发布偷来的东西。
你不一定要偷东西。
而这个资源的规则并没有禁止它......
https://www.mql5.com/ru/code/8089
;)