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

 
artem artem #:

SanAlex,是的,看了一下今年目前的测试器,一切正常)结果是好的,在不久的将来,我将尝试在一个真实的账户上运行它。

专家顾问的名称是什么?你是从kodobase下载的吗?我需要看看作者是如何在函数中实现它的

//+------------------------------------------------------------------+
// Permission to trade in this day                                   |
//+------------------------------------------------------------------+
bool TradingDay(int hmin, int hmax) // Определение времени и дня разрешения торговли
  {
   bool dtrade = false;
   switch(DayOfWeek())
     {
      case 1: // Monday
         if(Monday == 1)
            dtrade = true;
         break;
      case 2: // Tuesday
         if(Tuesday == 1)
            dtrade = true;
         break;
      case 3: // Wednesday
         if(Wednesday == 1)
            dtrade = true;
         break;
      case 4: // Thursday
         if(Thursday == 1)
            dtrade = true;
         break;
      case 5: // Friday
         if(Friday == 1)
            dtrade = true;
         break;
      default: //
         dtrade = false;
         break;
     }
   if(dtrade && !(Hour() >= hmin && Hour() <= hmax))
      dtrade = true;
   return dtrade;
  }
//+------------------------------------------------------------------+

我们缺少一些东西--为ontik增加条件

 
SanAlex #:

专家的名字是什么?你是从kodobase下载的吗?我需要看看作者是如何在函数中实现它的

还缺少一些东西--给ontik增加一个条件

萨沙,计时工作还没有包括在内。只是在开发过程中增加了一些功能插件)
 
MakarFX #:
萨沙,计时工作还没有包括在内。只是在开发过程中增加了一些功能插件)

我要用我自己的方式重做它。

 
artem artem #:

SanAlex,是的,看了一下今年目前的测试器,一切正常)结果是好的,在不久的将来,我将尝试在一个真实的账户上运行它。

这个和时间会起作用 - 我改变了功能

//---
input string   s0 = "Баланс";                  // 1
input string   Template       = "ADX";         // Имя шаблона(without '.tpl')
input double   TargetProfit   = 1000000;       // Баланс + Прибыль(прибавить к балансу)
input double   TargetLoss     = 0;             // Баланс - Убыток(отнять от баланса)
input string   s2 = "Trading options";         // 2
input double   Lots           = 0.1;           // Lots
input double   MaximumRisk    = 0.02;          // MaximumRisk
input double   DecreaseFactor = 3;             // DecreaseFactor
input double   InpSLoss       = 4000;          // стоплосс
input double   InpTProfit     = 2000;          // тейкпрофит
input string   s3 = "TP SL";                   // 3
input double   InpTakeProfit  = 2000;          // Exchange TP
input double   InpStopLoss    = 4000;          // Exchange SL
input string   s4 = "Индикатор MA";            // 4
input int      MovingPeriodLw = 13;            // MovingPeriodLw
input int      MovingPeriodS1 = 55;            // MovingPeriodS1
input int      MovingPeriodS2 = 89;            // MovingPeriodS2
input string   s5 = "Индикатор MACD";          // 5
input int      InpFastEMA     = 12;            // Fast EMA Period
input int      InpSlowEMA     = 26;            // Slow EMA Period
input int      InpSignalSMA   = 9;             // Signal SMA Period
input string   s6 = "Start Stop";              // 6
input datetime HoursFrom      = D'1970.01.02'; // 1 Время: старт
input datetime HoursTo        = D'1970.01.01'; // Время: стоп
input datetime HoursFrom2     = D'1970.01.01'; // 2 Время: старт
input string   s7 = "Time:Start Stop";         // 7
input int      HoursFrom1     = 0;             // Время: старт
input int      HoursTo1       = 24;            // Время: стоп
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Закрыть Общий профит или профит на паре
   if(ProfitTarget())
     {
      return;
     }
//--- Закрыть профит BUY или SELL на паре
   ProfitOnTick();
//---
   if((HoursFrom<HoursTo && TimeLocal()>=HoursFrom && TimeLocal()<HoursTo) ||
      (HoursFrom>HoursTo && (TimeLocal()<HoursTo || TimeLocal()>=HoursFrom)) ||
      (HoursFrom2<HoursTo2 && TimeLocal()>=HoursFrom2 && TimeLocal()<HoursTo2) ||
      (HoursFrom2>HoursTo2 && (TimeLocal()<HoursTo2 || TimeLocal()>=HoursFrom2)))
     {
      MqlDateTime currTime;
      TimeLocal(currTime);
      int hour0 = currTime.hour;
      if((HoursFrom1 < HoursTo1 && hour0 >= HoursFrom1 && hour0 < HoursTo1) ||
         (HoursFrom1 > HoursTo1 && (hour0 < HoursTo1 || hour0 >= HoursFrom1)))
        {
         // Определение направления пересечения мувингов
         if(Init)
            InitMetod();
         // Ожидание нового бара на графике
         if(timeprev == Time[0])
            return;
         timeprev = Time[0];
         // Открытие ордера по методу Пуриа
         CheckForOpen();
        }
     }
  }
//+------------------------------------------------------------------+

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

mt4和mt5中的时间函数可以工作

附加的文件:
 
MakarFX #:
你难道不想摆脱阶级吗?

我最近才发现他们。我不知道,这是一个巨大的方便的东西。你有什么建议?把所有的东西都放进函数里?如果这能解决这个问题。

我有两个全局对象(bar, db_last),属于一个Bar类,第一个对象用每个新的bar(图表上的通常bar)的参数初始化,第二个对象保存与所有条件对应的bar。事实上,在另一个订单类的本地对象中,所有的计算都是由参数db_last来开启一个订单。参数db_last和bar在很多地方被使用,但只用于读取,初始化和赋值发生在一个地方,即OnTick()中,所以对象的意外变化不应该被。

void OnTick()
{
  last_time = iTime(NULL, 0, 0);
  BreakevenActivate();

  if(last_time > bar.time_open){
    bar.Initialize();
    TrawlOnFractals();

    if(BarRelativeMA() == "bear"){
      n_arrow_down++;
      db_last = bar;
      if(db_last.IsBearishDB() == true) OpenOrder("bear");
      ArrowCreate(OBJ_ARROW_DOWN,0,"ArrowDown"+IntegerToString(n_arrow_down,4,'0'),
                  0, iTime(NULL,0,1),AnchorPrise("bear"),ANCHOR_BOTTOM);
    }

    if(BarRelativeMA() == "bull"){
      n_arrow_up++;
      db_last = bar;
      if(db_last.IsBullishDB() == true) OpenOrder("bull");
      ArrowCreate(OBJ_ARROW_UP,0,"ArrowUp"+IntegerToString(n_arrow_down++,4,'0'),
                  0, iTime(NULL,0,1),AnchorPrise("bull"),ANCHOR_TOP);
    }

    bar.time_open = last_time;
  }
   
}
 
Nerd Trader #:

我最近才发现他们。我不知道,这是一个巨大的方便的东西。你有什么建议?把所有的东西都放进函数里?如 果这能解决这个问题。

我有两个全局对象(bar, db_last),属于一个Bar类,第一个对象用每个新的bar(图表上的通常bar)的参数初始化,第二个对象保存与所有条件对应的bar。事实上,在另一个订单类的本地对象中,所有的计算都是由参数db_last来开启一个订单。参数db_last和bar在很多地方被使用,但只用于读取,初始化和赋值发生在一个地方,即OnTick()中,所以对象的意外变化不应该发生

我想试试- 它不需要花钱)。

但也有错误,特别是简单归一化的错误

你能在私信中把文件发给我吗?我会看一看的。
 
SanAlex #:

专家的名字是什么?你是从kodobase下载的吗?我需要看看作者是如何在函数中实现它的

我遗漏了一些东西--在ontik上添加条件

SanAlex,我在这条信息中附上了下载的版本--它有Puria+追踪止损+Breakeven水平+看门狗交易。我会按时间测试交易,只是我还没来得及做)

附加的文件:
 
MakarFX #:

缺乏历史记录会影响测试开始时的指标读数

MakarFX,我也想到了这一点,所以它应该可以正常工作。

 
artem artem #:

SanAlex,在这个帖子中附上了我下载的版本--它是Puria+追踪止损+盈亏平衡点+时钟交易。我想通过时钟来测试交易,只是我还没来得及做)。

在kodobase中发现了这个https://www.mql5.com/ru/code/12654

- 我错过了你的目标,你想在其中改变什么?

Советник по методу Пуриа
Советник по методу Пуриа
  • www.mql5.com
Советник открывает позиции по алгоритму метода Пуриа.
 
SanAlex #:

在kodobase中发现了这个https://www.mql5.com/ru/code/12654

- 我错过了你的目标,你想在其中改变什么?

我想做什么补充。

1.为了做到这一点,交易 的开盘 所有指标条件的检查(跨越一个快速(5)两个慢速(75)(85)和MACD条在同一方向的快速(5)开盘)只在新蜡烛的开盘价 (每个30分钟蜡烛的第一个刻度) 执行。
  1. 为指标的 "归零 "创造条件比如说 用于快速移动的 (5) 如果它高于慢速--那么它就是一个购买的信号。如果它往下走并触及其中一个,或者在慢速移动的(75)和(85 之间--那么来自快速移动指标的信号就像它一样"零",并且只要它触及或保持在慢速1之间 就会保持在这个" 零 "的位置。如果在那之后 快线向一边 越过两个慢线(包括如果它回到触及慢线之前的那一边)-- 那么它将是这个指标的一个信号 使用MACD,情况类似- 只有 MACD=0才会被认为是 "归零"(例如,如果在第一根蜡烛上,MACD以0.0043开盘,而在第二根蜡烛上以-0.0010 开盘,这意味着第二根蜡烛上 MACD已经" 归零" 并发出了新信号)。然而,有一段时间 快线(5)和MACD应该有点 "平起平坐" - 如果(5)没有改变它相对于慢线的位置,并且MACD在前一根蜡烛上开在错误的区域(没有进场),而在下一根蜡烛上 - 在与快线相同的区域,那么所有的条件已经趋同,应该对订单进行进场。请注意,所有这些应该只在蜡烛的开盘价上进行--只在这一个刻度上进行
  1. 而最后,要让专家顾问等待4个连续的蜡烛开盘

    1. 第1个开盘价--(5)高于(75)和(85)+MACD柱子开在0以上-- 4个确认中的一个
    2.第2根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱子开在0以上-- 4次确认中的2次是
    3.第3根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱子开在0以上-- 4次确认中的3次是
    4.第4根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱在0以上开盘-- 4个确认 的4个-- 在同一根蜡烛(第4根)上开立买入交易
卖出 订单 情况也一样,只是在另一个方向的指标应该打开。有一点很重要-- 如果在第1根蜡烛到第4根蜡烛的任何阶段 指标改变了它们的位置(例如,在第3根开盘的蜡烛上,MACD柱打开时低于0,或者=0)-- 那么一切都会重置,因为在连续第4根蜡烛的开盘时没有检查信号。
原因: