//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 11.09.2008 |//| Описание : Перенос уровня стопа в безубыток |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ( "" - любой символ, |//| NULL - текущий символ) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//| Кроме того, функция MovingInWL() предполагает наличие глобальных переменных (внешних параметров скрипта или советника)://| int LevelProfit - Уровень профита в пунктах, которого должна достигнуть позиция для того, чтобы её стоп был перенесён на уровень безубытка.//| int LevelWLoss - Уровень безубытка в пунктах, на который будет перенесён стоп позиции после того, как её профит достигнет уровня LevelProfit в пунктах.//+----------------------------------------------------------------------------+void MovingInWL(string sy="", int op=-1, int mn=-1) {
double po, pp;
int i, k=OrdersTotal();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
po=MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_BUY) {
if (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_BID);
if (pp-OrderOpenPrice()>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1);
}
}
}
if (OrderType()==OP_SELL) {
if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_ASK);
if (OrderOpenPrice()-pp>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1);
}
}
}
}
}
}
我重复一下这个问题,也许因为有后续问题,所以没有人注意到。
我决定了解ATR 指标的工作原理, 同时研究其代码。我理解其中的精髓,但它写得很奇怪。
这里是它的启动 功能。
这里是有一些混乱的第一块。
如果counted_bars的值<1,做什么事情有意义呢。在我看来,这意味着指标还没有计算任何条形,我应该直接退出函数,因为还没有任何数值......。有什么好处呢?
为什么AtrBuffer 有索引[Bars-i]?我的理解是,如果没有值,就将缓冲区设置为0.0。但是事实证明,数值0.0只被定义在从(Bars) 到(AtrPeriod) 的条形图上,而从AtrPeriod 到第0个条形图 没有任何东西被写入缓冲区。为什么?
我不明白这个代码片段的逻辑
在下一个街区。
在行。
条件如果i==Bars-1。看起来,从左边的图表开始 的第1条 的值被 考虑了...但这是非常遥远的,这个价值有什么用呢?
小节从右往左数(从0到最后一个(Bars)减1)。每一个新的条形图(0),所有条形图都相应地增加一个,最后一个条形图(在左边)从未以数字形式指定,这个变量Bars,因为没有人知道你有什么历史,但它保证了指标在所有历史上的工作,它有。训练你的逻辑思维,没有逻辑思维就没有办法理解任何事情!
我有1点-1分。这是否意味着我需要20美元才能承受200点的下行止损?
小节从右往左数(从0到最后一个(Bars)减1)。每一个新的条形图(0),所有的条形图都相应地增加一个,而最后一个条形图(左)永远不会被指定为数字,这个变量Bars,因为没有人知道你有什么历史,但它保证了指标在整个历史上的工作,它有。训练你的逻辑思维,没有逻辑思维就无法理解任何事情!
我知道小节是从右到左计算的。如果图表上有5000个柱子,ATR周期=14,那么[Bars-i]将从(5000-1) 到(5000-14) 取值,即从4999 到4986。
所以AtrBuffer的索引i 将等于4999 到4986。而从0 到4986的 剩余条数在哪里?
我知道小节是从右到左计算的。如果图表上有5000个柱子,ATR周期=14,那么[Bars-i]将从(5000-1) 到(5000-14) 取值,即从4999 到4986。
所以AtrBuffer的索引i 将等于4999 到4986。而从0 到4986的 其他条形图在哪里?
你是如何计算的?如果ATR周期=14,那么零点栏就给出了零点栏之前的14个栏的平均值,以此类推,进入历史深度。
i 在时间上最后的14个小节,但在数量上首先是平均的,或者用公式做什么。也是通过前14个小节的时间来计算第4986个 小节的数值,也就是通过站在左边的小节来计算的。
学习Doc和教程中的for运算符!
你是如何计算的?如果ATR周期=14,那么零点栏就给出了零点栏之前的14个栏的平均值,以此类推,进入历史深度。
我 去超过14条的最后一次,但超过第一个由数字来平均它们或由公式做什么。同时按时间上最后的14条计算第4986 条的数值,即按站在左边的计算。
学习Doc中的for运算符和教程!。
维克多,你的假设是不合逻辑的。
如果指标没有处理过一个柱子,这意味着它应该处理所有的柱子,而不是终止程序。
而历史上的指标值是需要用来分析历史的:)
尊敬的专业人士,在5分钟的测试中,4个摊位的EA都是ticks--还是很糟糕,还是更多还是更少?
信息不多,专业人员都在睡觉:)
如果0.01手=1美分,那么对于一个0.1手的头寸,200点的止损=20美元。
请帮助使这一功能反之亦然。
也就是说,如果价格从未平仓订单中亏损了LevelProfit(你可以称之为LevelLoss),你必须将TakeProfit移至零或亏损1点2点,等等,取决于你在LevelWLoss参数中输入的内容,这样,如果价格甚至转好,就不会再有利润。或者是你有一个现成的?
提前感谢你))。