int ПодсчетОткрОрдеров() { int k=OrdersTotal(); if (Символ=="0") Символ=Symbol(); for (int i=МаксКолОрдеров; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Символ || Символ=="") { if (МагикНомер<0 || OrderMagicNumber()==МагикНомер) { if (OrderMagicNumber()<1) return(True); } } } } return;
}
//+------------------------------------------------------------------+ int start() { if(ПодсчетОткрОрдеров()==0)ПровТоргУсловий(); }
非常感谢您的回答!但是,如何描述Ask[0],Bid[0]之后的未来栏?
一旦这个未来柱出现,它就会变成零。而现在是[0]的酒吧将是[1]。
Ask和Bid不是数组,只有一个当前值,所有过去的值都被遗忘了
请帮助我理解押金的计算
,因为我的估计押金只有在所有订单完全锁定时才与终端
。当我在订单系统中增加一个订单时--押金
,终端的结果总是与我的估计押金相差很小
,但我永远无法做到弹指一挥间!
这里有一个非常简短的例子。
该账户有4个订单,每个10.00手,其中两个自行车
,两个卖出。很明显,账户处于平衡状态,所有的订单都被锁定
,我们计算每个订单的标准存款,除以4,一切都踮起脚尖
,终端正好敲击。
我们在1.4059的1.00手时再放一个byke
我们计算存款。很明显,为此我们必须支付标准押金
,因为所有现有的订单都在盒子里。
对于1:100的杠杆率,我们有新自行车的认捐
ZALBuy = 140.59*1.00 = 140.59
因此,以前的存款应该增加这一数额,
加上以前的存款和我们1.00字节的存款
ZAL=ZALold + ZALBuy = 1407.23 + 140.59 = 1547.82
在终端设置再见后,存款变成了1547.91
这将是可以接受的,如果我把再见比
,汇率1.4068高9个点,因为如果我们计算存款的实际增长
,作为存款前后的差异,我们得到的正是汇率1.4068,1.00手的标准存款
。
1547.91 - 1407.23 = 140.6801
改变了终端的版本,唉,没有帮助!
-----------------------------------------------
请原谅我占用你的时间,但这些不断的小差异真的困扰着我
,因为我的机器计算不同的选项,
,而存款作为余额和利润是用来计算
,所有的账户参数 在某些行动后才实施
。所以准确性在这里是非常理想的。
也许我有不明白的地方,但我搜索了一下文件
,没有找到这种差异的原因。
我将非常感谢您的帮助!
尊敬的MADZX先生
你可以忘记这个设置。重新引用发生,如果食堂想拿你的钱,他们不在乎差距是什么,反正他们会这样做)。这就是自动交易的现实,大多数自称是 "最好的经纪人XXXX"(XXXXX--插入一个大陆或星系的名字,等等)的骗子公司
改变或不改变设置,一切都保持不变。
完全正确!我也见过它 !
你好!你能给我一个真正的酒吧+1的描述吗?例如,我需要下一栏的价格,而不是现在的价格。
据我所知,你是想从未来的机器中获取信息。
如果你找到一个方法--分享,我将不胜感激 :)
向大家问好。我自己是编程新手,所以请解决这个问题。
同一个账户上的多个EA,有必要开设有限的订单数量。
例如:10个EA,但只能开5个订单,但每个货币对不能超过一个。
这一点已经实现了,但它并不是这样工作的。
extern int МаксКолОрдеров = 5;
//+------------------------------------------------------------------+
int ПодсчетОткрОрдеров() {
int k=OrdersTotal();
if (Символ=="0") Символ=Symbol();
for (int i=МаксКолОрдеров; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Символ || Символ=="") {
if (МагикНомер<0 || OrderMagicNumber()==МагикНомер) {
if (OrderMagicNumber()<1) return(True);
}
}
}
}
return;
}
//+------------------------------------------------------------------+
int start()
{
if(ПодсчетОткрОрдеров()==0)ПровТоргУсловий();
}
我将按以下方式实现这样的表演:
你的10匹马都在按自己的时间表工作,就像在相邻的房间里一样
,因此没有一匹马知道墙后的邻居在做什么--这是你的想法的主要问题
!
因此,我将指示每个EA将他们的行动写进磁盘文件
,该文件将被所有马匹使用,因为它在终端的目录中。
如果他们中的任何一个人有一个强烈的愿望,要在他们的窗口
,应该首先分析这个文件,并检查实施的可能性
希望 !
就你的情况而言,你需要在文件中加入订单的数量
和货币对的数量
。例如:
EURUSD 1
GBPUSD 1
EURGBP 0
这里我们看到,我们不能在欧元兑美元和英镑兑美元 上开立交易,因为脚本不允许
,每个货币对有一个以上的订单。
很明显,有多少个货币对在工作,就会有多少行。
有了这个解决方案,你的所有马匹将始终知道此刻发生了什么
,并能计算出此刻是否允许任何行动。
当你在任何货币对上设置订单时,你必须在右边的行中输入1
当你关闭它时,将其替换为0
这肯定会奏效,尽管对于一个新手来说有点复杂
。但请继续,因为每个人都在那里 - 像一个新手一样直到时机到来
祝您狩猎愉快!
MADZX
我正在写一个回撤策略。我需要在相应蜡烛的极值以上(以下)放置一个止损单。下面是一个例子。
很明显,如果收盘价低于开盘价,就是看跌的蜡烛,反之,就是看涨的蜡烛。我想知道如何制造一个条件,说之前的蜡烛是看涨的。...某某某。
从逻辑上讲,我做了一个函数,可以确定蜡烛的类型。
然后,你应该以某种方式询问指数为1的柱子是看涨还是看跌......。...做一些事情...
我怎么做呢?
我会这样实现这样的节目:
,你的10匹马都在按照自己的时间表工作,就像在相邻的房间里一样
,因此没有一个人知道墙后的邻居在做什么--这是你的想法的主要问题
。
因此,我将指示每个EA将他们的行动写入一个磁盘文件
,这个文件将被所有马匹使用,因为它在终端的目录中。
如果他们中的任何一个人有一个强烈的愿望,要在他们的窗口
,应该首先分析这个文件,并检查实施的可能性
希望 !
就你的情况而言,你需要在文件中加入订单的数量
和货币对的数量
。例如:
EURUSD 1
GBPUSD 1
EURGBP 0
这里我们看到,我们不能在欧元兑美元和英镑兑美元 上开立交易,因为脚本不允许
,每个货币对有一个以上的订单。
很明显,有多少个货币对在运行,就会有多少行。
有了这个解决方案,你的所有马匹将始终知道此刻发生了什么
,并能计算出此刻是否允许任何行动。
当你在任何货币对上设置订单时,你必须在右边的行中输入1
当你平仓时,将其替换为0
这肯定会奏效,虽然对新手来说有点复杂
。但请继续,因为每个人都在那里 - 像新手一样直到时机到来
祝您狩猎愉快!
MADZX
谢谢你的提示,但这有点太复杂了。然后在你的版本中,它变成了所有的工作,它需要10个检查条件来进入。
但它们只打开及时赶到的前五个,然后,当其中一个关闭时,第一个符合条件的就会再次打开。
不限于EURUSD 1 , GBPUSD 1 , EURGBP 0.
我认为应该有一个更简单的解决方案。它应该类似于按给定参数计算具有限制条件的订单 总数。
而这个限制可以通过一个符号或一个不超过1的神奇数字来设定。
虽然你的版本可能也能工作,但我无法决定如何在代码中实现它。
我这里有一件奇怪的事情。这里是开仓单的功能。
这里有一个错误。
if(SL < g_stopLevel) SL = g_stopLevel*pt;
如果止损水平=5,那么你就想把止损放在0.00005。
第二个错误是你没有检查你下单的位置。 如果蜡烛图在其高点低点附近收盘,你会得到错误130。 正如你在图片中看到的,服务器开了一个卖单而不是止损单,因为你试图在一个高于或等于当前价格的价格开一个止损单。
学习使用印刷品。只要把Print();放在正确的地方,把所需的变量放在括号里,用这个来分隔。像这样:Print(Price," ",SL); 在测试过程中,在 "专家 "选项卡中打开一个订单的时刻,你将看到这些变量等于什么,你将能够理解什么是错的。
日志还将显示EA试图做什么,在哪里设置止损和止盈。你会在那里看到你需要的一切。
从逻辑上讲,我做了一个函数,可以检测蜡烛的类型。
让我们在函数start里面工作。
首先,我们创建一个变量,在这个变量中我们将写出前一个蜡烛的方向。
int Candle=-1;
我们将用一些数值来填充它,其中一个表示看涨,另一个表示看跌。 如果是-1,它就什么都不是(它还没有被确定或者它没有方向close=open)。
我建议通过类比交易订单来使用这个值,0-买入,1-卖出。
那么我们就需要写。
如果(Close[1]>Open[1]) Candle=0; else
if(Close[1]<Open[1] Candle=1;
现在我们已经定义了一个方向,我们可以直接在OrderSend( string symbol,int cmd, ...other stuff...)函数 中使用它。
if(Candle!=-1) OrderSend( Symbol(),Candle, ...其他东西...)。
或者按照你的比喻。
if(Candle==0) OpenBuy();
if(Candle==1) OpenSell();
谢谢你的提示,但这有点太复杂了。然后发现所有的人都在你的变体中工作,而且需要10个来检查进入条件。
而且他们只先打开5个已经赶上的,然后当其中一个关闭时,第一个符合条件的就会再次打开。
不限于EURUSD 1 , GBPUSD 1 , EURGBP 0。
我认为应该有一个更简单的解决方案。它应该像按给定参数计算具有限制条件的订单总数。
而我们需要用一个符号或者一个神奇的数字来限制这个数字,或者不超过一个。
虽然,也许你的方案也会奏效,但如何在代码中实现它,我想不出。
或者也许像这样:
而这里的函数这里有一个错误。
如果止损水平=5,那么你试图将止损放在0.00005。
第二个错误是你没有检查你下单的位置。 如果蜡烛图在其高点低点附近收盘,你会得到错误130。 正如你在图片中看到的,服务器开了一个卖单而不是止损单,因为你试图在一个高于或等于当前价格的价格开一个止损单。
学习使用印刷品。只要把Print();放在正确的地方,把所需的变量放在括号里,用这个来分隔。像这样:Print(Price," ",SL); 在测试过程中,在 "专家 "选项卡中打开一个订单的时刻,你将看到这些变量等于什么,你将能够理解什么是错的。
日志还将显示EA试图做什么,在哪里设置止损和止盈。它将显示所需的一切。
我时常这样使用它。看,现在的函数看起来像这样。
我在日记中读到。
因此,最初从买入价到停止价的差额为1.3204-1.3194=0.001 点。
进一步的1.3210 - 1.3201 =0.009 分
而在第二种情况下,由于某种原因,止损点更接近于进场价格,但并没有出现错误!在这种情况下,我们的止损点就会出现。我想了想,不明白。
我后来以不同的方式纠正了这个错误。代码中已经有了条件。
if(price > Ask) && if(price < Bid) 分别用于购买和出售。还是有另一种变体?现在我们已经没有错误了。但是,尽管如此,我还是想听听一个更有经验的程序员的意见。