Merhaba insanlar. Mum deseninin kapandığı tespit edildikten sonra kod çizimleri kutusunu yapmak ve metni yalnızca BİR KEZ yazdırmak için neye ihtiyacım olduğunu öğrenebilir miyim?
//+------------------------------------------------------------------+
//| 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);
}
#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" )]
publicclass NPSqueeze : Indicator
{
#region Variables
// Wizard generated variablesprivateint length = 20 ; // Default setting for Lengthprivatedouble bBDev = 2 ; // Default setting for BBDevprivatedouble 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>protectedoverridevoid Initialize()
{
Add( new Plot(Color.FromKnownColor(KnownColor.Orange), PlotStyle.Bar, "Squeeze" ));
Overlay = false ;
}
/// <summary>/// Called on each bar update event (incoming tick)/// </summary>protectedoverridevoid 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 removepublic DataSeries Squeeze
{
get { return Values[ 0 ]; }
}
[Description( "BB and KC average length" )]
[GridCategory( "Parameters" )]
publicint Length
{
get { return length; }
set { length = Math.Max( 1 , value); }
}
[Description( "BB deviations" )]
[GridCategory( "Parameters" )]
publicdouble BBDev
{
get { return bBDev; }
set { bBDev = Math.Max( 0 , value); }
}
[Description( "KC deviation in ATR's" )]
[GridCategory( "Parameters" )]
publicdouble 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;
privatestatic 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);
}
}
}
Lütfen bir Ninja göstergesini MQL4, MT4'e dönüştürmek için yardıma ihtiyacım var.
Ertesi gün için forex çiftlerinin fiyatını tahmin etmek için bir MATLAB kodu geliştirdim. Şimdi, bir .csv dosyasını okuyabilen bir mql4 uzmanına ihtiyacım var: sabit SL,TP ve LOTS ile tarih, saat, sembol ve sinyal(satın=1, sat=-1 ve 0=hiçbir şey) içerir.
Selam beyler! Bir sorum var ve yardıma ihtiyacım var lütfen. Giriş/çıkış/TP/SL vb. için çeşitli göstergelere dayalı bir EA yaptım. Benim sorunum, çok fazla işlem açması. Demek istediğim: Bir ticaret açmanın koşullarından biri olarak 2 satırlık bir çapraz göstergem var. Yukarı geçiş + başka bir koşul alım satımı açar, aşağı geçiş + başka bir koşul satış açar. Öyleyse, göstergenin kesiştiğini, diğer tüm koşulların karşılandığını, ticaretin açıldığını varsayalım. Birkaç mumdan sonra TP vurulur ve ticaret kapanır. Ancak gösterge henüz diğer yöne dönmedi ve ardından başka bir işlem açıldı. Belirli koşullarda durdurmak istediğim şey bu. Örneğin, gösterge 7 mum önce çevrildiyse, herhangi bir işlem açmayın. Demek istediğim, örneğin bir trend oluşuyor, tüm göstergelerim bir ticaret açmak için anlaşıyorlar, ticaret açılıyor ve 4-5 mumdan sonra TP vuruluyor. Ve başka bir sipariş açıldı ama belki trend neredeyse bitti ve ben dibe yakın giriyorum. Bu değiştirmek istiyorum. Göstergem [7] mum önce çevrilirse, bir ticaret açmamak için bir koşul oluşturmak.
Merhaba, göstergelerimden birine bir arabellek eklemem ve onu bir SMA ile doldurmam gerekiyor (birinin düzeltmem gereken bir sorun için yapmam gerektiğini önerdiği gibi). Sorun şu ki, bunu nasıl yapacağımdan pek emin değilim, lütfen biri yardım edebilir mi?
Merhaba insanlar. Mum deseninin kapandığı tespit edildikten sonra kod çizimleri kutusunu yapmak ve metni yalnızca BİR KEZ yazdırmak için neye ihtiyacım olduğunu öğrenebilir miyim?
//+------------------------------------------------------------------+ //| 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); }kendi değerinizle bir mq4 yatay çizgisi nasıl yapılır. lütfen
Lütfen bir Ninja göstergesini MQL4, MT4'e dönüştürmek için yardıma ihtiyacım var.
Rgds.
tamam
İyi günler kodlayıcılar,
Ertesi gün için forex çiftlerinin fiyatını tahmin etmek için bir MATLAB kodu geliştirdim. Şimdi, bir .csv dosyasını okuyabilen bir mql4 uzmanına ihtiyacım var: sabit SL,TP ve LOTS ile tarih, saat, sembol ve sinyal(satın=1, sat=-1 ve 0=hiçbir şey) içerir.
Bana temin ederseniz sevinirim.
Teşekkürler Meryem.
Çift gönderi yapmayın! Zaten başka bir konu açmıştınız.
Forumun genel kuralları ve en iyi uygulamaları. - Genel - MQL5 programlama forumu (20 17 )