//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.04.2012 |//| Описание : Закрытие позиций при нахождении цены в зоне TakeProfit |//| в течение заданного количества баров, |//| а также при попыте выйти из этой зоны. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//+----------------------------------------------------------------------------+void ClosePosByTakeProfitZone(string sy="", int op=-1, int mn=-1, int tf=0) {
double pa, pb, po, pp, tp;
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if ((mn<0 || OrderMagicNumber()==mn) && OrderTakeProfit()>0) {
po=MarketInfo(OrderSymbol(), MODE_POINT);
if (po==0) Message("В обзоре рынка отсутствует символ "+OrderSymbol());
else {
if (OrderType()==OP_BUY) {
RefreshRates();
pb=MarketInfo(OrderSymbol(), MODE_BID);
pp=iLow(OrderSymbol(), tf, iLowest(OrderSymbol(), tf, MODE_LOW, TP.ZoneBars, 0));
tp=OrderTakeProfit()-TP.ZonePoint*po;
if (pp>tp || (pb<tp && (iHigh(OrderSymbol(), tf, 0)>tp) || (iHigh(OrderSymbol(), tf, 1)>tp))) ClosePosBySelect();
}
if (OrderType()==OP_SELL) {
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pp=iHigh(OrderSymbol(), tf, iHighest(OrderSymbol(), tf, MODE_HIGH, TP.ZoneBars, 0));
tp=OrderTakeProfit()+TP.ZonePoint*po;
if (pp<tp || (pb>tp && (iLow(OrderSymbol(), tf, 0)<tp) || (iLow(OrderSymbol(), tf, 1)<tp))) ClosePosBySelect();
}
}
}
}
}
}
}
//+------------------------------------------------------------------+ //|返回信号指针设置间隔| //+------------------------------------------------------------------+ int GetArrowInterval() { int p = Period();
switch (p) { case 1: return(4); case 5: return(5); case 15: return(6); case 30: return(8); case 240: return(20); case 1440: return(40); case 10080: return(80); case 43200: return(150); } xml-ph-0015@deep
输入参数: |
nm1 - 第一行的名称|
nm2 - 第二行名称
产出M是价格水平。
PS。我很抱歉把我的代码贴在这里,向这个主题的作者道歉。只是想,也许有人也有过路费的问题......。
我想到了(已经在《年鉴》 中)。
PS。我向这个主题的作者道歉,因为我在这里发布了我的代码。只是想,也许有人也在十字路口挣扎......。
我对这个功能进行了一些调整。现在它在计算交叉点时不会崩溃。输入参数: | nm1 - 第一行名称 |
nm2 - 第二行名称
产出M - 价格水平。
PS。我很抱歉把我的代码贴在这里,向这个主题的作者道歉。只是想,也许有人也在为穿越而挣扎......。
好吧,也许这个函数应该返回这个非常的价格水平(就像之前的变体一样)!此外,你的代码中包含一个未声明的变量 "T"。
嗯,它返回了)
关于未声明的变量 - 对不起。我站在正确的立场上。
双M - 跨越价格水平。这个变量是在开始时声明的。
预告片是一个专家顾问,看看这个功能是如何工作的。
我无法让它立即加载...
我无法让它立即加载...
你不应该搅乱水面,IMHO--在这里 用描述轰炸功能库,这就是全部...
那些需要它的人将会找到它。
ClosePosByTakeProfitZone()函数。
如果价格在接近TakeProfit的区域内踩了一定数量的柱子,或者试图退出这个区域,这个函数就会以市场价格关闭头寸。选择要关闭的位置是使用外部参数指定的。
晚上好,伊戈尔!
不久前开始学习你的函数,在第36页,我不太理解这些函数,请帮助我理解。
函数GetArrowInterval()。
//+------------------------------------------------------------------+
//|返回信号指针设置间隔|
//+------------------------------------------------------------------+
int GetArrowInterval() {
int p = Period();
switch (p) {
case 1: return(4);
case 5: return(5);
case 15: return(6);
case 30: return(8);
case 240: return(20);
case 1440: return(40);
case 10080: return(80);
case 43200: return(150); } xml-ph-0015@deep
即这个函数被用来使用SetArrow()函数设置箭头,即在ObjectCreate(nm,OBJ_ARROW, 0, 0,0)一行代替价格水平,告诉我这是怎么回事,我不清楚返回值的意思(4,5,6,8,10....)
新版本的功能也仍然不清楚。//+
//|作者:Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//|版本:12.10.2007 |
//+----------------------------------------------------------------------------+
//|描述:返回信号指针间隔 |
//|参数: |
//|pr - 相对于窗口价格大小的百分比 |
//+-------------------
返回((WindowPriceMax()-WindowPriceMin())/100*pr/Point)。
WindowPriceMax()函数返回垂直刻度的最大值,即这是最大的价格值,但在什么时期?
并感谢您的辛勤工作....))))
。
不久前开始学习你的函数,在第36页,我不太理解这些函数,请帮助我理解。
即这个函数被用来使用SetArrow()函数设置箭头,即代替ObjectCreate(nm, OBJ_ARROW, 0, 0,0)一行中的价格水平,告诉我这是如何做到的...
你一定是误解了这些功能的目的。它们不对价格进行操作,也不放图标;它们只根据当前的时间框架,以点为单位返回距离。请参考下面的图片。
如果你把这样的标记放在不靠近价格的地方,而是在一定的距离上,例如在H1时间框架上,然后你切换到M1,你可能会看不到标记。刻度会发生变化,图标会远远向下或向上。你提到的功能是为了确保图标在任何时间框架下都能在图表上看到。
Lisi4ka330:
...返回值(4,5,6,8,10....)意味着什么?
以点为单位的距离,取决于当前的时间框架。
Lisi4ka330:
WindowPriceMax()函数返回垂直刻度的最大值,即它是最大的价格值,但在什么时期?
不是在任何时期...只是在当前窗口。例如,在下图中,最高价格 为97.35