//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 02.07.2013 |//| Описание : Выполняет корректирование ценовых уровней под STOPLEVEL. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование торгового инструмента |//| op - торговая операция |//| pp - цена открытия/установки |//| sl - ценовой уровень StopLoss |//| tp - ценовой уровень TakeProfit |//+----------------------------------------------------------------------------+void CorrectingPrice(string sy, int op, double& pp, double& sl, double& tp) {
if (sy=="" || sy=="0") sy=Symbol();
RefreshRates();
int di=MarketInfo(sy, MODE_DIGITS);
int msl=MarketInfo(sy, MODE_STOPLEVEL);
int sp=MarketInfo(sy, MODE_SPREAD);
double mp=MarketInfo(sy, MODE_POINT);
double pa=MarketInfo(sy, MODE_ASK);
double pb=MarketInfo(sy, MODE_BID);
double ds=NormalizeDouble(pp-sl, di);
double dp=NormalizeDouble(pp-tp, di);
if (msl==0) msl=2*sp;
switch (op) {
case OP_BUY:
pp=pa;
sl=pp-ds;
tp=NormalizeDouble(pp-dp, di);
if (sl>pp-msl*mp) sl=pp-msl*mp;
if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
break;
case OP_SELL:
pp=pb;
sl=NormalizeDouble(pp-ds, di);
tp=pp-dp;
if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
if (tp>pp-msl*mp) tp=pp-msl*mp;
break;
case OP_BUYLIMIT:
if (pp>pa-msl*mp) {
pp=pa-msl*mp;
sl=pp-ds;
tp=NormalizeDouble(pp-dp, di);
}
if (sl>pp-msl*mp) sl=pp-msl*mp;
if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
break;
case OP_BUYSTOP:
if (pp<pa+msl*mp) {
pp=pa+msl*mp;
if (sl>0) sl=pp-ds;
if (tp>0) tp=NormalizeDouble(pp-dp, di);
}
if (sl>pp-msl*mp) sl=pp-msl*mp;
if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
break;
case OP_SELLLIMIT:
if (pp<pb+msl*mp) {
pp=pb+msl*mp;
sl=NormalizeDouble(pp-ds, di);
tp=pp-dp;
}
if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
if (tp>pp-msl*mp) tp=pp-msl*mp;
break;
case OP_SELLSTOP:
if (pp>pb-msl*mp) {
pp=pb-msl*mp;
sl=NormalizeDouble(pp-ds, di);
tp=pp-dp;
}
if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
if (tp>pp-msl*mp) tp=pp-msl*mp;
break;
default:
Message("CorrectingPrice(): Неизвестная торговая операция!");
break;
}
}
int min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛdouble min_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МИНИМУМА
min_bars// НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
int max_bars= iHighest(NULL, // ТЕКУЩИЙ СИМВОЛ
PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРАMODE_HIGH,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ХАЙ
range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕdouble max_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
max_bars// НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
); //КОНЕЦ ПОЛУЧЕНИЯ ДАННЫХ ДЛЯ ПОКУПАК*********** //----ПОЛУЧЕНИЕ ДАННЫХ ДЛЯ ОТЛОЖЕННЫХ ПРОДАЖint min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛ
PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРАMODE_HIGH,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ХАЙ
range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕdouble min_Price=iLow(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
min_bars// НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
); // КОНЕЦ АЙЛОУ
我已经计算好了价格,像这样设置偏移量(马卡尔,你至少不是我这种类型的人,不可能被感动;-))。
我不明白我应该怎么做,我如何确保如果计算值小于允许的范围,无论如何,订单将在最小的可能距离上打开?
试试这个。
我想你会明白的。
试试这个。
我想你会掌握它的窍门。
Alexey,非常感谢你的这段代码。但不幸的是,由于中风的后果,我无法阅读其他人的代码。我想请你指导一下如何使用这个代码,并建议把它附在什么地方以及如何做?
以下是我想到的内容。我正在寻找一个 像这样的X-bar的最低价格
但这是不正确的,因为我指定的是最低价aihai,而不是低价。修正为低价后,错误减少了,但仍然发生((()
因此,如果不难的话,请发送关于如何使用一块折扣代码的说明...
大家好!我 试图把你们写的建议应用到我的上一篇文章中,但没有帮助。我 仍然得到错误130L ,但这可能不是止损本身的问题,而是开盘价 的问题。 买入止损和卖出止损的开盘价是通过确定x个蜡烛数的最高/最低价格,以这种方式获得的。
问题不在止损上,因为我使用了完全相同的止损和atp,固定的,市场订单打开时没有错误。这意味着问题出在设置挂单的价格计算上。我自己是这样打开订单的
P/S,我忘了说,我想用挂单来模拟某种开仓的价格过滤器,也就是说,如果价格向正确的方向发展,挂单就会触发,但如果不是,它就会被取消,我就退出市场。请问,我在确定开盘价方面做错了什么?也许在交易的价格过滤器上有一个更简单的解决方案?
p/s 非常友好,如果你写了一个可以应用的代码,请为它写一个详细的说明,因为我在阅读代码时有严重的困难。我指的是一个详细的说明,这段代码是用来做什么的,以及如何应用它(把它附加到一个变量上,然后用它做一些事情或其他事情,请把你对代码的评论写得更容易理解)。提前感谢;-)P / S谁有知识和经验不要去,帮助一个兄弟 - 不要拧;-) 必须完成圣杯OP;-) 。
大家好!我 试图把你们写的建议应用到我的上一篇文章中,但没有帮助。我 仍然得到错误130L ,但这可能不是止损本身的问题,而是开盘价 的问题。 买入止损和卖出止损的开盘价是通过确定x个蜡烛数的最高/最低价格,以这种方式获得的。
问题不是出在止损上,因为我使用了完全相同的止损和atp,固定的,市场订单打开时没有错误。这意味着问题出在设置挂单的价格计算上。我自己是这样打开订单的
P/S,我忘了告诉你,我想用挂单来模拟某种开仓的价格过滤器,也就是说,如果价格向正确的方向发展,挂单就会触发,但如果没有,它就会取消,我就退出市场了。我在确定开盘价方面做错了什么?也许在交易的价格过滤器上有一个更简单的解决方案?
p/s 非常友好,如果你写了一个可以应用的代码,请为它写一个详细的说明,因为我在阅读代码时有严重的困难。我指的是一个详细的说明,这段代码是用来做什么的,以及如何应用它(把它附加到一个变量上,然后用它做一些事情或其他事情,请把你对代码的评论写得更容易理解)。提前感谢;-)P / S谁有知识和有经验不要去,帮助一个兄弟 - 不要乱搞;-) 我必须完成圣杯O_o;-)
在iLowest函数中,插入MODE_HIGH,而不是MODE_LOW。
你能给我一个提示吗?我在图上画了一条线段。我需要知道该段的开始和结束价格。能否做到?
你能给我一个提示吗?我在图上画了一条线段。我需要知道该段的开始和结束价格。能否做到这一点?
你能给我一个提示吗?我在图上画了一条线段。我需要知道该段的开始和结束价格。能否做到这一点?
该段最好有一个原始名称
在iLowest函数中,插入MODE_HIGH,而不是MODE_LOW。
同事们!
谁来帮帮我?