datetime some_time=TimeCurrent();
externstring Symbol3 = ""; //Инструмент (""текущий по умолчанию)externdouble P=15; //Таймфреймint start()
{
//Инициализация переменныхbool FractalsUp=false;
bool FractalsDown=false;
int FractalsUpPrice=0;
int FractalsDownPrice=0;
int FractalsLimit=100;
double EMA=iMA(NULL,P,5,3,MODE_EMA,PRICE_CLOSE,0);
//Цикл сканирования последних свечей FractalsLimit, начиная с самых старых и заканчивая самыми последними.for (int i=FractalsLimit; i>=0; i--)
{
//Если на свече есть фрактал, значение будет больше нуля и будет равно самой высокой или самой низкой цене.double fu=iFractals(NULL,0,MODE_UPPER,i);
double fl=iFractals(NULL,0,MODE_LOWER,i);
//Если есть верхний фрактал, я сохраняю значение и устанавливаю true для переменной FractalsUp.if(fu>0)
{
FractalsUp=true;
FractalsDown=false;
FractalsUpPrice=fu;
if (((Close[0])>fu)&&(OrdersTotal() == 0)&&(Close[0]>Open[0])&&(Close[0]>High[1]&&(Close[0]>EMA)))
{
if ((OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY)==true))
{
datetime Cd=OrderCloseTime();
int hd=+iBarShift(Symbol3,P,Cd)+1;
if (hd<=2)
{
return(-1);
}
}
metka1();
}
}
//Если есть нижний фрактал, я сохраняю значение и устанавливаю true для переменной FractalsDown.if(fl>0)
{
FractalsUp=false;
FractalsDown=true;
FractalsDownPrice=fl;
if (((Close[0])<fl)&&(OrdersTotal() == 0)&&(Close[0]<Open[0])&&(Close[0]<Low[1]&&(Close[0]<EMA)))
{
if ((OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY)==true))
{
datetime Cd1=OrderCloseTime();
int hd1=+iBarShift(Symbol3,P,Cd1)+1;
if (hd1<=2)
{
return(-1);
}
}
metka2();
}
}
//Если свеча имеет верхний и нижний фрактал, значения сохраняются, но мы не считаем его последним фракталом.if(fu>0 && fl>0)
{
FractalsUp=false;
FractalsDown=false;
FractalsUpPrice=fu;
FractalsDownPrice=fl;
}
}
return(0);
}
int metka1()
{
int send1=OrderSend(Symbol3,OP_BUY,0.01,Ask,3,Bid-70*Point,Bid+70*Point);
return(0);
}
int metka2()
{
int send2=OrderSend(Symbol3,OP_SELL,0.01,Bid,3,Ask+70*Point,Ask-70*Point);
return(0);
}
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
票据上的OrderSelect已经提前进行了。该命令正在等待中。除了在每个tick上检查订单类型 外,如何让订单成为可销售的?在日志中,这个时间被记录下来,但似乎订单结构中没有提供这个时间的字段,还是我错了?当我们改变订单类型时,OrdersTotal()和OrdersHistoryTotal也不会改变,如果我理解正确的话。
其余的问题在我看来都很清楚)
你试过OrderOpenTime吗? 我甚至不记得它是否在头寸被触发时发生变化。
我不知道什么时候需要检查挂单是否在每一个tick(而不是在关键动作前或每1...5分钟)触发,但MT4没有其他方法。
在MT5中,它更方便。在OTT中,你发现了交易,如果你需要处理列表,你就在OTT中进行处理。
下午好!
我正在做一个关于分形的猫头鹰。有一个问题。帮助。其本质是这样的。
脚本通过变量[FractalsLimit=100;]从最后100个蜡烛图中搜索最后的顶部或底部分形,如果分形被突破,则开立 买入头寸,反之则开立 卖出头寸。
应该用最后的100个蜡烛图来寻找最大或最小的分叉点,并建立一个位置。这意味着,它只关注最大和最小的分形,不关注最后的分形。
你试过OrderOpenTime吗? 我不记得当挂单被触发时它是否会改变。
我不知道什么时候需要检查每一个tick(而不是在关键动作之前或每1...5...分钟)是否有挂单触发,但在MT4中没有其他方法。
在MT5中,它更方便。在OTT中,你学会了进行交易。 如果你需要与列表一起工作,你将在OTT中进行处理。
OrderOpenTime显示挂单开仓的时间。这是一个更多了解操作的问题。因此,时间被写入日志和日记,而不在其他地方显示。尊敬的是,如果我们没有修复它,那么我们可以在以后查看它,根据事实)))))
如果我理解正确的话,这将是MT5中的开仓/交易。虽然我不明白分成订单/交易/位置是一个最佳解决方案,但当然还有更多的数据。
它发生了))。1在英文字母l i等的背景下会非常迷失,所以更方便的是称其为后缀001,2...等。
我明白你的意思了)纠正了错误,现在第二个手柄的值是1,0。如果你在第一个句柄里放了一个比第二个句柄大的时间框架,那么第二个句柄的值就是0。你能告诉我,我还需要解决什么问题才能使第二个手柄的值正确吗?
OrderOpenTime显示挂单的开仓时间。这是一个更多了解操作的问题。事实证明,时间被记录在日志和日记中,没有反映在其他地方。据此,如果我们没有修好,那么我们只能以后再看,根据事实)))))
你已经提出这个问题一个星期了。 我提出要回顾一下交易策略中的下单原则
但如果这个问题对你来说很重要,用 "打勾 "的方式来 "解决 "它并不是问题。
我可以像所有的初学者一样 "修复",将挂单保存在一个大的数组中,并在一个点到来时检查这些点 - 我已经写了速度,这在测试者或真实交易中都不是关键,但数组并不方便,要保持它们的清洁很烦人 - 这增加了错误...
我想提议研究的是CArrayInt SB https://www.mql5.com/ru/docs/standardlibrary/datastructures/carrayint
在CArrayInt中,你将添加门票,这种数据类型将允许你轻松地删除 "成为可销售的门票"。
正如我在上面写的那样,准确度--1刻度,检查代码将是最小的。
在MT5中,如果我理解正确的话,它将是一个头寸/交易开盘。虽然我不理解将订单/交易/头寸划分为最佳解决方案,但当然还有更多数据。
如果你能为MT5写文章--那么这个讨论有什么意义呢?你写的,平台更强大,功能更强--比较MT4和MT5是没有意义的,登录MT4更容易,但MT5有更多功能
你从一周前就开始提出这个问题,我建议你重新考虑交易策略中的下单原则。
我还是不明白。当然,战略是不同的。这个问题来自一个事实,即相当重要的事件只反映在日志中。而且没有人直接回答说,除了订单成为可销售的时间的日志,没有任何地方))))。
而策略的逻辑并不取决于终端。如果逻辑很蹩脚,那么你当然可以编造它,但跛脚不会消失))))。
这一点仍不清楚。当然,战略是不同的。这个问题来自于一个相当重要的事件只反映在日志中。而且没有人直接回答,除了订单成为市场的时间日志,没有其他地方))))。
重要性...这对你来说确实很重要,在这之前,你写了多少年的策略,以及它是如何工作的,甚至是盈利的;)
通常情况下,不要下很多挂单,跟随市场订单,如果有必要,增加一个挂单 - 挂单变成市场订单
我们使用一切手段--平均法、金字塔法、订单网格法和...和很多...我不记得交易商论坛上的这些滑稽行为,我已经一年多没有读过它们了--我自己的想法比别人的多 ))
没有这样的信息--不!!!。
重要性...这对你来说很重要,在此之前,你写了多少年的策略,它就会发挥作用,甚至是盈利;)
作为一项规则,你不应该放置很多挂单,跟随市场订单,如果有必要,添加一个挂单 - 挂单成为市场订单。
我们使用一切手段--平均法、金字塔法、订单网格法和...和很多...如果你不知道,你应该在交易员论坛上阅读这些技巧,我已经一年多没有做了--我自己的想法比别人的多 ))
谢谢))))
马丁和平均数是自欺欺人,令人望而却步(因为你既不能计算也不能预测风险,根据BP属性的定义))))),有时,但只是有时,是合理的))))。
如果策略正确,一个订单就足够了))))。
如果策略正确,一个订单就足够了))))。
如果在您的TS中,订单的数量 被严格设定,那么您应该不会在确定当前tick上的挂单发生了什么问题。
知道确切的时间不会给你带来任何东西--所有的信息都是在打钩到达时收到的--没有打钩,就没有信息。
你好,我面临一个问题,如何从EA中改变一个自定义指标的 参数。问题是,当我改变指标列表中的任何参数时,会创建一个新的副本。 当我进入这些副本的属性时,每个副本都有自己的参数。我越是改变参数,创建的副本就越多。我通过iCustom使用它。
比如说。
#resource "\Indicators\\inicator.ex4"
外部Var1=1。
//------------------------------------------
空白的OnTick()
{
int A;
Var1++;
A=iCustom(Symbol(),PERIOD_CURRENT,":: Indicators\indicator",Var1,0,0)。
因此,我们在指标列表中看到。
指标(参数Var1=2时)。
指标(参数Var1=3时)。
指标(参数Var1=4时)。
....等。