Помощь в кодировании - страница 785

 

Здравствуйте.Подскажите, пожалуйста, что нужно сделать, чтобы код рисовал окно и выводил текст только ОДИН раз после закрытия свечного паттерна?

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---code start   
   int counted_bars=IndicatorCounted();
//---check for possible errors   
   if (counted_bars<0) return(-1);
//---last counted bar will be recounted   
   if (counted_bars>0) counted_bars--;    
   int limit=Bars-counted_bars;
   for(int i = limit-1; i >= 0; i--)
   {
      if (i >= MathMin(Maxbars-1, rates_total-1-50)) continue;
     
      double high1  = High[i];
      double low1   = Low[i];
      double open1  = Open[i];
      double close1 = Close[i];             
      double high2  = High[i+1];
      double low2   = Low[i+1];
              
      Bar1[i] = EMPTY;
      Bar2[i] = EMPTY;
      Bar3[i] = EMPTY;
      Bar4[i] = EMPTY;
      int sigtf=0;
      if(_Period==1440 || _Period==43200){sigtf=6;}
      else{sigtf=5;}
      int sigbox=0;
      //double   priceopen = iOpen(NULL,0,1);
      //double   priceclose = iClose(NULL,0,1);
      if (high1>high2 && low1<low2 && close1>open1)
      {
         Bar1[i] = High[i];      
         Bar2[i] = Low[i];  
         Bar3[i] = Open[i];      
         Bar4[i] = Close[i];
         sigbox = 1;
         Print("test 1");
      }
           
      if(sigbox==1)
      {
         sigbox=0;
         DrawBox("Area",i,Time[i],Bar1[i],Time[i]+((_Period*sigtf)*60),Bar2[i],clrGainsboro);
      }
      else
      {
         sigbox=0;
      }      
   }
   ChartRedraw(0);
//---code end
   return(rates_total);
  }
 
void DrawBox(string bxname, int i, datetime time1, double price1,  datetime time2, double price2, color bxcolor)
{   
   string objname = objref+bxname+(string)i;   
   ObjectDelete(objname);
   ObjectCreate(0,objname,OBJ_RECTANGLE,0,time1,price1,time2,price2);
   ObjectSet(objname, OBJPROP_COLOR, bxcolor);
   ObjectSet(objname, OBJPROP_STYLE, STYLE_SOLID);
   ObjectSet(objname, OBJPROP_WIDTH, 0);
   ObjectSet(objname, OBJPROP_FILL, true);
   ObjectSet(objname, OBJPROP_BACK, false);
   ObjectSet(objname, OBJPROP_SELECTABLE, false);
   ObjectSet(objname, OBJPROP_HIDDEN, true);
}


Файлы:
 

как сделать горизонтальную линию mq4 с собственным значением. пожалуйста

 
#region  Using declarations
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Xml.Serialization;
using NinjaTrader.Cbi;
using NinjaTrader.Data;
using NinjaTrader.Gui.Chart;
#endregion

// This namespace holds all indicators and is required. Do not change it.
namespace NinjaTrader.Indicator
{
    /// <summary>
    /// Enter the description of your new custom indicator here
    /// </summary>
    [Description("Enter the description of your new custom indicator here")]
    public class NPSqueeze : Indicator
    {
        #region  Variables
        // Wizard generated variables
            private int length = 20; // Default setting for Length
            private double bBDev = 2; // Default setting for BBDev
            private double kCDev = 1.5; // Default setting for KCDev
        // User defined variables (add any user defined variables below)
        #endregion

        /// <summary>
        /// This method is used to configure the indicator and is called once before any bar data is loaded.
        /// </summary>
        protected override void Initialize()
        {
            Add(new Plot(Color.FromKnownColor(KnownColor.Orange), PlotStyle.Bar, "Squeeze"));
            Overlay                             = false;
        }

        /// <summary>
        /// Called on each bar update event (incoming tick)
        /// </summary>
        protected override void OnBarUpdate()
        {
            // Use this method for calculating your indicator values. Assign a value to each
            // plot below by replacing 'Close[0]' with your own formula.
                        double value = Bollinger(bBDev,length).Upper[0]-KeltnerChannel(kCDev,length).Upper[0] ;
            Squeeze.Set(value);
        }

        #region  Properties
        [Browsable(false)]      // this line prevents the data series from being displayed in the indicator properties dialog, do not remove
        [XmlIgnore()]           // this line ensures that the indicator can be saved/recovered as part of a chart template, do not remove
        public DataSeries Squeeze
        {
            get { return Values[0]; }
        }

        [Description("BB and KC average length")]
        [GridCategory("Parameters")]
        public int Length
        {
            get { return length; }
            set { length = Math.Max(1, value); }
        }

        [Description("BB deviations")]
        [GridCategory("Parameters")]
        public double BBDev
        {
            get { return bBDev; }
            set { bBDev = Math.Max(0, value); }
        }

        [Description("KC deviation in ATR's")]
        [GridCategory("Parameters")]
        public double KCDev
        {
            get { return kCDev; }
            set { kCDev = Math.Max(0, value); }
        }
        #endregion
    }
}

#region  NinjaScript generated code. Neither change nor remove.
// This namespace holds all indicators and is required. Do not change it.
namespace NinjaTrader.Indicator
{
    public partial class Indicator : IndicatorBase
    {
        private NPSqueeze[] cacheNPSqueeze = null;

        private static NPSqueeze checkNPSqueeze = new NPSqueeze();

        /// <summary>
        /// Enter the description of your new custom indicator here
        /// </summary>
        /// <returns></returns>
        public NPSqueeze NPSqueeze(double bBDev, double kCDev, int length)
        {
            return NPSqueeze(Input, bBDev, kCDev, length);
        }

        /// <summary>
        /// Enter the description of your new custom indicator here
        /// </summary>
        /// <returns></returns>
        public NPSqueeze NPSqueeze(Data.IDataSeries input, double bBDev, double kCDev, int length)
        {
            if (cacheNPSqueeze != null)
                for (int idx = 0; idx < cacheNPSqueeze.Length; idx++)
                    if (Math.Abs(cacheNPSqueeze[idx].BBDev - bBDev) <= double.Epsilon && Math.Abs(cacheNPSqueeze[idx].KCDev - kCDev) <= double.Epsilon && cacheNPSqueeze[idx].Length == length && cacheNPSqueeze[idx].EqualsInput(input))
                        return cacheNPSqueeze[idx];

            lock (checkNPSqueeze)
            {
                checkNPSqueeze.BBDev = bBDev;
                bBDev = checkNPSqueeze.BBDev;
                checkNPSqueeze.KCDev = kCDev;
                kCDev = checkNPSqueeze.KCDev;
                checkNPSqueeze.Length = length;
                length = checkNPSqueeze.Length;

                if (cacheNPSqueeze != null)
                    for (int idx = 0; idx < cacheNPSqueeze.Length; idx++)
                        if (Math.Abs(cacheNPSqueeze[idx].BBDev - bBDev) <= double.Epsilon && Math.Abs(cacheNPSqueeze[idx].KCDev - kCDev) <= double.Epsilon && cacheNPSqueeze[idx].Length == length && cacheNPSqueeze[idx].EqualsInput(input))
                            return cacheNPSqueeze[idx];

                NPSqueeze indicator = new NPSqueeze();
                indicator.BarsRequired = BarsRequired;
                indicator.CalculateOnBarClose = CalculateOnBarClose;
#if  NT7
                indicator.ForceMaximumBarsLookBack256 = ForceMaximumBarsLookBack256;
                indicator.MaximumBarsLookBack = MaximumBarsLookBack;
#endif
                 indicator.Input = input;
                indicator.BBDev = bBDev;
                indicator.KCDev = kCDev;
                indicator.Length = length;
                Indicators.Add(indicator);
                indicator.SetUp();

                NPSqueeze[] tmp = new NPSqueeze[cacheNPSqueeze == null ? 1 : cacheNPSqueeze.Length + 1];
                if (cacheNPSqueeze != null)
                    cacheNPSqueeze.CopyTo(tmp, 0);
                tmp[tmp.Length - 1] = indicator;
                cacheNPSqueeze = tmp;
                return indicator;
            }
        }
    }
}

// This namespace holds all market analyzer column definitions and is required. Do not change it.
namespace NinjaTrader.MarketAnalyzer
{
    public partial class Column : ColumnBase
    {
        /// <summary>
        /// Enter the description of your new custom indicator here
        /// </summary>
        /// <returns></returns>
        [Gui.Design.WizardCondition("Indicator")]
        public Indicator.NPSqueeze NPSqueeze(double bBDev, double kCDev, int length)
        {
            return _indicator.NPSqueeze(Input, bBDev, kCDev, length);
        }

        /// <summary>
        /// Enter the description of your new custom indicator here
        /// </summary>
        /// <returns></returns>
        public Indicator.NPSqueeze NPSqueeze(Data.IDataSeries input, double bBDev, double kCDev, int length)
        {
            return _indicator.NPSqueeze(input, bBDev, kCDev, length);
        }
    }
}

// This namespace holds all strategies and is required. Do not change it.
namespace NinjaTrader.Strategy
{
    public partial class Strategy : StrategyBase
    {
        /// <summary>
        /// Enter the description of your new custom indicator here
        /// </summary>
        /// <returns></returns>
        [Gui.Design.WizardCondition("Indicator")]
        public Indicator.NPSqueeze NPSqueeze(double bBDev, double kCDev, int length)
        {
            return _indicator.NPSqueeze(Input, bBDev, kCDev, length);
        }

        /// <summary>
        /// Enter the description of your new custom indicator here
        /// </summary>
        /// <returns></returns>
        public Indicator.NPSqueeze NPSqueeze(Data.IDataSeries input, double bBDev, double kCDev, int length)
        {
            if (InInitialize && input == null)
                throw new ArgumentException("You only can access an indicator with the default input/bar series from within the 'Initialize()' method");

            return _indicator.NPSqueeze(input, bBDev, kCDev, length);
        }
    }
}

Пожалуйста, мне нужна помощь в конвертации индикатора Ninja в MQL4, MT4.

Rgds.

 
Afghan123 #:
ok
Запрос на получение кода
 
Спасибо за обновление
 
Pls как я могу получить мой индикатор 4
 

Добрый день, программисты,

Я разработал код MATLAB для прогнозирования цены форекс пар на следующий день. Теперь мне нужен эксперт по mql4, который может читать .csv файл: содержит дату, время, символ и сигнал (buy=1, sell=-1 и 0=ничего) с постоянными SL, TP и LOTS.

Я буду признателен, если вы предоставите мне такую возможность.

Спасибо, Марьям.

 
Здравствуйте, ребята! У меня есть один вопрос и мне нужна помощь, пожалуйста. Я сделал советника, основанного на нескольких индикаторах для входа/выхода/TP/SL и т.д. Моя проблема в том, что он открывает слишком много сделок. Я имею в виду следующее: У меня есть один индикатор пересечения двух линий как одно из условий для открытия сделки. Если пересечение вверх + еще одно условие открывает сделку на покупку, если пересечение вниз + еще одно условие открывает сделку на продажу. Итак, предположим, что индикатор пересекается вверх, все остальные условия выполнены, сделка открыта. Через несколько свечей TP достигается и сделка закрывается. Но индикатор еще не перевернулся в другую сторону, и тогда открывается другая сделка. Это то, что я хочу остановить в определенных условиях. Например, если индикатор перевернулся 7 свечей назад, не открывать сделку. Я имею в виду, что, например, формируется тренд, все мои индикаторы согласны на открытие сделки, сделка открывается, и TP достигается через 4-5 свечей. И открывается еще один ордер, но, возможно, тренд уже почти закончился, и я вхожу близко к дну. Это я хочу изменить. Создать условие таким образом, чтобы если мой индикатор перевернулся [7] свечей назад, не открывать сделку.
 
Daniel cioca #: Здравствуйте ребята! У меня есть один вопрос

Не делайте двойных сообщений! У вас уже была открыта другая тема.

Общие правила и лучшие практики форума. -Общий - Форум по программированию на MQL5 (2017)
 
Здравствуйте, мне нужно добавить буфер к одному из моих индикаторов и заполнить его SMA (как кто-то посоветовал мне сделать для проблемы, которую мне нужно было решить). Проблема в том, что я не очень уверен, как это сделать, может кто-нибудь помочь?
Причина обращения: