新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1341

 
DanilaMactep:

我已经计算好了价格,像这样设置偏移量(马卡尔,你至少不是我这种类型的人,不可能被感动;-))。

我不明白我应该怎么做,我如何确保如果计算值小于允许的范围,无论如何,订单将在最小的可能距离上打开?

试试这个。

我想你会明白的。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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;
  }
}
 
Alekseu Fedotov:

试试这个。

我想你会掌握它的窍门。

Alexey,非常感谢你的这段代码。但不幸的是,由于中风的后果,我无法阅读其他人的代码。我想请你指导一下如何使用这个代码,并建议把它附在什么地方以及如何做?

以下是我想到的内容。我正在寻找一个 像这样的X-bar的最低价格

  int min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛ
          double min_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МИНИМУМА
          min_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        

但这是不正确的,因为我指定的是最低价aihai,而不是低价。修正为低价后,错误减少了,但仍然发生((()

因此,如果不难的话,请发送关于如何使用一块折扣代码的说明...

 

大家好!我 试图把你们写的建议应用到我的上一篇文章中,但没有帮助。我 仍然得到错误130L ,但这可能不是止损本身的问题,而是开盘价 的问题。 买入止损和卖出止损的开盘价是通过确定x个蜡烛数的最高/最低价格,以这种方式获得的。

          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//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          ); // КОНЕЦ АЙЛОУ

问题不在止损上,因为我使用了完全相同的止损和atp,固定的,市场订单打开时没有错误。这意味着问题出在设置挂单的价格计算上。我自己是这样打开订单的

OrderSend(Symbol(),OP_SELLSTOP,lot,min_Price,slippages,min_Price+sl , min_Price-tp ,comment_ao_otloj_sell); // ОТКРКЫВВАЕМ ОТЛОЖЕННЫЙ СЕЛ ОРДЕР

OrderSend(Symbol(),OP_BUYSTOP,lot,max_Price,slippages,max_Price-sl,max_Price+tp ,comment_ao_otloj_buy,magik_number,TimeCurrent()+order_life_time); // ОТКРЫВАЕМ ОТЛОЖЕННЫЙ БАЙ ОРДЕР


P/S,我忘了说,我想用挂单来模拟某种开仓的价格过滤器,也就是说,如果价格向正确的方向发展,挂单就会触发,但如果不是,它就会被取消,我就退出市场。请问,我在确定开盘价方面做错了什么?也许在交易的价格过滤器上有一个更简单的解决方案?

p/s 非常友好,如果你写了一个可以应用的代码,请为它写一个详细的说明,因为我在阅读代码时有严重的困难。我指的是一个详细的说明,这段代码是用来做什么的,以及如何应用它(把它附加到一个变量上,然后用它做一些事情或其他事情,请把你对代码的评论写得更容易理解)。提前感谢;-)P / S谁有知识和经验不要去,帮助一个兄弟 - 不要拧;-) 必须完成圣杯OP;-) 。

 
同事们!

与物体一起工作。请给我发一段代码的例子,其中手动绘制的三角形、椭圆或正方形(我想它在图表上有一个名字)将执行一些动作--例如,警报(在价格击中对象的情况下)。我非常恳求你。我对它了解不多,也无法理解参考书中的理论,但我怀疑这个原理是基本的。
 
DanilaMactep:

大家好!我 试图把你们写的建议应用到我的上一篇文章中,但没有帮助。我 仍然得到错误130L ,但这可能不是止损本身的问题,而是开盘价 的问题。 买入止损和卖出止损的开盘价是通过确定x个蜡烛数的最高/最低价格,以这种方式获得的。

问题不是出在止损上,因为我使用了完全相同的止损和atp,固定的,市场订单打开时没有错误。这意味着问题出在设置挂单的价格计算上。我自己是这样打开订单的


P/S,我忘了告诉你,我想用挂单来模拟某种开仓的价格过滤器,也就是说,如果价格向正确的方向发展,挂单就会触发,但如果没有,它就会取消,我就退出市场了。我在确定开盘价方面做错了什么?也许在交易的价格过滤器上有一个更简单的解决方案?

p/s 非常友好,如果你写了一个可以应用的代码,请为它写一个详细的说明,因为我在阅读代码时有严重的困难。我指的是一个详细的说明,这段代码是用来做什么的,以及如何应用它(把它附加到一个变量上,然后用它做一些事情或其他事情,请把你对代码的评论写得更容易理解)。提前感谢;-)P / S谁有知识和有经验不要去,帮助一个兄弟 - 不要乱搞;-) 我必须完成圣杯O_o;-)

在iLowest函数中,插入MODE_HIGH,而不是MODE_LOW。

 

你能给我一个提示吗?我在图上画了一条线段。我需要知道该段的开始和结束价格。能否做到?

附加的文件:
EURUSDM1.png  22 kb
 
Forallf:

你能给我一个提示吗?我在图上画了一条线段。我需要知道该段的开始和结束价格。能否做到这一点?

你可以在
 
Forallf:

你能给我一个提示吗?我在图上画了一条线段。我需要知道该段的开始和结束价格。能否做到这一点?

该段最好有一个原始名称

 
Alekseu Fedotov:

在iLowest函数中,插入MODE_HIGH,而不是MODE_LOW。

非常感谢你的注意和提示--我纠正了这个案例,在2年的测试中,有130个26个错误。同时,有115笔交易正常开启
 
Порт-моне тв:
同事们!

与物体一起工作。请给我发一段代码的例子,其中手动绘制的三角形、椭圆或正方形(我想它在图表上有一个名字)将执行一些动作--例如,警报(在价格击中对象的情况下)。我非常恳求你。我对这个问题了解不多,也不理解参考书中的理论,但我怀疑这个原理是基本的。

谁来帮帮我?