코딩 도움말 - 페이지 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로 변환하는 데 도움이 필요합니다.

판독기

 
Afghan123 # :
좋아요
코드 요청
 
업데이트 감사합니다
 
Pls는 내 표시기를 어떻게 얻을 수 있습니까 4
 

좋은 하루 코더,

나는 다음 날의 외환 쌍 가격 예측을 위한 MATLAB 코드를 개발했습니다. 이제 .csv 파일을 읽을 수 있는 mql4의 전문가가 필요합니다. 날짜, 시간, 기호 및 신호(구매=1, 판매=-1 및 0=아무것도 없음)가 포함되어 있으며 일정한 SL, TP 및 LOTS가 있습니다.

당신이 저를 위해 그것을 제공한다면 나는 감사할 것입니다.

고마워 마리암.

 
안녕하세요 여러분! 질문이 하나 있는데 도움이 필요합니다. 나는 진입/퇴장/TP/SL 등에 대한 여러 지표를 기반으로 EA를 만들었습니다. 제 문제는 너무 많은 거래를 시작한다는 것입니다. 내 말은 : 거래를 시작하는 조건 중 하나로 하나의 2 라인 교차 표시가 있습니다. 위로 교차하는 경우 + 다른 조건이 매수 거래를 시작하고, 아래로 교차하는 경우 + 다른 조건이 열린 경우 판매가 시작됩니다. 따라서 지표가 교차하고 다른 모든 조건이 충족되고 거래가 시작된다고 가정해 보겠습니다. 몇 초 후에 TP에 도달하고 거래가 마감됩니다. 그러나 지표는 아직 반대 방향으로 뒤집히지 않고 또 다른 거래가 열립니다. 이것은 특정 조건에서 멈추고 싶은 것입니다. 예를 들어 표시기가 7개의 양초를 뒤집었다면 거래를 열지 마십시오. 내 말은 예를 들어 추세가 형성되고 있고, 모든 지표가 거래 개시에 동의하고, 거래가 개시되고, 4-5 캔들 후에 TP에 도달한다는 것입니다. 그리고 또 다른 오더가 열렸는데 아마 추세가 거의 끝나서 바닥에 가깝게 진입하고 있습니다. 이것은 내가 변경하고 싶습니다. 내 지표가 [7] 전에 양초를 뒤집었다면 거래를 열지 않는 그런 방식으로 조건을 만드는 것.
 
Daniel cioca # : 안녕하세요 여러분! 질문이 하나 있습니다

이중 게시 하지 마십시오! 이미 다른 스레드가 열려 있습니다.

포럼의 일반 규칙 및 모범 사례. - 일반 - MQL5 프로그래밍 포럼 (20 17 )
 
안녕하세요, 내 표시기 중 하나에 버퍼를 추가하고 SMA로 채워야 합니다(누군가가 수정해야 할 문제에 대해 수행해야 한다고 제안한 대로). 문제는 이 작업을 수행하는 방법이 너무 확실하지 않다는 것입니다. 누군가 도와주세요.
사유: