Igor'a ve bu konuya düzenli olarak yazan herkese hitap ediyorum. Konuyu inceledim trendin açısını belirleyen bir fonksiyon bulamadım.6 veya daha fazla mumda 15 dakikada trendin açısını belirleyecek bir fonksiyonunuz var mı?Varsa lütfen yayınlayın.
mazepa писал(а)>> Igor'a ve bu konuya düzenli olarak yazan herkese hitap ediyorum. Konuyu inceledim trendin açısını belirleyen bir fonksiyon bulamadım.6 veya daha fazla mumda 15 dakikada trendin açısını belirleyecek bir fonksiyonunuz var mı?Varsa lütfen yayınlayın.
Açıdan değil, fiyat değişim oranından bahsedebilirsiniz.
Selamlar! Emekleriniz için teşekkürler, harika bir iş çıkarıyorsunuz.
Bir gösterge yapıyorum, ancak EquationDirect işlevi bazen çizgi kesişme noktasını yanlış hesaplıyor :(
Grafikte sahip olduğum çizgi noktalarını hesapladım ve netlik için test göstergesine ekledim. Fonksiyon bir offset ile kesişimi doğru hesaplamıyor, yani bir açıda fonksiyondaki formül uymuyor ve bir şekilde düzeltilmesi gerekiyor ki bu tür hesaplamalar yapıldığında farklı bir formüle göre yapılsın. Benim nacizane fikrime göre
#define CPR "DECIDE"#define mName "Signal"#property indicator_chart_windowexternint SignalBars =30;// кол-во баров для сигналаexternint TrendBars =300;// кол-во баров для т. линийexterncolor CostMaxColor =FireBrick;// цвет максимальной ценыexterncolor CostMinColor =SteelBlue;// цвет минимальной ценыexterncolor VLineColor =DarkSlateGray;// цвет минимальной ценыexterncolor TrendColor =Gray;// цвет трендовых линийexterncolor OrderColor =Green;// цвет сигнала ордераexterncolor LabelColor =Navy;// цвет меток// Инициализация - функция начальных установокint init (){if(!IsDemo())return(0);if( SignalBars <30) SignalBars =30;}// ДеИнициализация - функция завершения работыint deinit (){ObjectDelete("UpTrend");ObjectDelete("DownTrend");ObjectDelete("MaxCost");ObjectDelete("MinCost");ObjectDelete("SignOrder");ObjectDelete("Trend");ObjectDelete("Volume");}// СТАРТ - основная функция обработкиint start (){int bar ;double val , upb , t1 , t2 , h1 , h2 ;
val =173;
bar =iHighest(NULL,0,MODE_HIGH,100,0);
t1 =Time[0]-273600;
h1 =High[ bar ];
t2 = t1 -518400;
h2 =High[ bar ]- val *Point;
SetTLine ( TrendColor ,"DownTrend", t2 , h2 , t1 , h1 , True ,STYLE_SOLID,2);
upb = EquationDirect ( t1 , h1 , t2 , h2 ,Time[0]);
SetArrow (6,DarkViolet,"UpBorder",Time[0], upb ,2);
SetVLine ( VLineColor ,"VLine",Time[0],STYLE_SOLID);}// --- ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ ---// вертикальная временная линияvoid SetVLine (color cl ,string nm ="",datetime t1 =0,int st =0,int wd =1){// Параметры:// cl - цвет линии// nm - наименование ("" - время открытия текущего бара)// t1 - время (0 - время открытия текущего бара)// st - стиль линии (0 - простая линия)// wd - ширина линии (1 - по умолчанию)if( nm =="") nm =DoubleToStr(Time[0],0);if( t1 <=0) t1 =Time[0];if(ObjectFind( nm )<0)ObjectCreate( nm ,OBJ_VLINE,0,0,0);ObjectSet( nm , OBJPROP_TIME1 , t1 );ObjectSet( nm , OBJPROP_COLOR , cl );ObjectSet( nm , OBJPROP_STYLE , st );ObjectSet( nm , OBJPROP_WIDTH , wd );}// установка трендовой линииvoid SetTLine (color cl ,string nm ="",datetime t1 =0,double p1 =0,datetime t2 =0,double p2 =0,bool ry = False ,int st =0,int wd =1){// Параметры:// cl - цвет линии// nm - наименование ( "" - время открытия текущего бара)// t1 - время открытия бара ( 0 - Time[10]// p1 - ценовой уровень ( 0 - Low[10])// t2 - время открытия бара ( 0 - текущий бар)// p2 - ценовой уровень ( 0 - Bid)// ry - луч (False - по умолчанию)// st - стиль линии ( 0 - простая линия)// wd - ширина линии ( 1 - по умолчанию)if( nm =="") nm =DoubleToStr(Time[0],0);if( t1 <=0) t1 =Time[10];if( t2 <=0) t2 =Time[0];if( p1 <=0) p1 =Low[10];if( p2 <=0) p2 =Bid;if(ObjectFind( nm )<0)ObjectCreate( nm ,OBJ_TREND,0,0,0,0,0);ObjectSet( nm , OBJPROP_TIME1 , t1 );ObjectSet( nm , OBJPROP_PRICE1 , p1 );ObjectSet( nm , OBJPROP_TIME2 , t2 );ObjectSet( nm , OBJPROP_PRICE2 , p2 );ObjectSet( nm , OBJPROP_COLOR , cl );ObjectSet( nm , OBJPROP_RAY , ry );ObjectSet( nm , OBJPROP_STYLE , st );ObjectSet( nm , OBJPROP_WIDTH , wd );}// вычисление точки пересеченияdouble EquationDirect (double x1 ,double y1 ,double x2 ,double y2 ,double x ){// Параметры:// x1,y1 - координаты первой точки,// x2,y2 - координаты второй точки,// x - значение, для которого вычислить Yif( x2 == x1 )return( y1 );elsereturn(NormalizeDouble(( y2 - y1 )/( x2 - x1 )*( x - x1 )+ y1 ,Digits));}// установка значькаvoid SetArrow (int cd ,color cl ,string nm ="",datetime t1 =0,double p1 =0,int sz =0){// Параметры:// cd - код значка// cl - цвет значка// nm - наименование ("" - время открытия текущего бара)// t1 - время открытия бара (0 - текущий бар)// p1 - ценовой уровень (0 - Bid)// sz - размер значка (0 - по умолчанию)if( nm =="") nm =DoubleToStr(Time[0],0);if( t1 <=0) t1 =Time[0];if( p1 <=0) p1 =Bid;if(ObjectFind( nm )<0)ObjectCreate( nm ,OBJ_ARROW,0,0,0);ObjectSet( nm , OBJPROP_TIME1 , t1 );ObjectSet( nm , OBJPROP_PRICE1 , p1 );ObjectSet( nm , OBJPROP_ARROWCODE , cd );ObjectSet( nm , OBJPROP_COLOR , cl );ObjectSet( nm , OBJPROP_WIDTH , sz );}
kesişme noktasının bir ofset ile gerçekleşmesi nedeniyle, bu EquationDirect işlevinden kaynaklanmaz, hesaplama doğru yapılır, bu terminaldeki bir tür hatadan kaynaklanır, çizgi bir ofset ile çizilir
bu yüzden önce Zaman[0] ile kesişme noktasını belirlemem ve ardından başlangıç noktasından Zaman[0] ile kesişme noktasına bir eğilim çizgisi çizmem gerekiyordu, bu durumda her şey yolunda gidiyor
Gösterge sinyalinin anahtar simgesini ( grafik ölçeği değiştiğinde) konumlandırmak için grafikte en doğru zamana ihtiyacım var, yani anahtar simgesini en doğru zamanın ötesine taşırsanız, yani henüz gelmemiş simge anahtarlar (sinyal, sipariş vermek için açılır veya kapanır, yani, danışmanın ticaret yapmasına izin vermek veya yasaklamak için sinyali değiştirerek yapabilirsiniz)
ve aşırı sol zaman şu şekilde tanımlanır: grafikte görünen aşırı çubuğu elde ederiz
WindowFirstVisibleBar() ve ondan zamanı alın Time[WindowFirstVisibleBar()]
Hiçbir şey eklemeye gerek yok... zaten sıralı
Çok teşekkürler !
Şubeniz internette bir hazine, bulduklarıma çok sevinmedim.
Hiçbir şey eklemeye gerek yok... zaten sıralı
Igor'a ve bu konuya düzenli olarak yazan herkese hitap ediyorum. Konuyu inceledim trendin açısını belirleyen bir fonksiyon bulamadım.6 veya daha fazla mumda 15 dakikada trendin açısını belirleyecek bir fonksiyonunuz var mı?Varsa lütfen yayınlayın.ancak dışarı çekmenize (koşmanıza) izin veren işlevler var
profil
örneklem
???
Igor'a ve bu konuya düzenli olarak yazan herkese hitap ediyorum. Konuyu inceledim trendin açısını belirleyen bir fonksiyon bulamadım.6 veya daha fazla mumda 15 dakikada trendin açısını belirleyecek bir fonksiyonunuz var mı?Varsa lütfen yayınlayın.
Açıdan değil, fiyat değişim oranından bahsedebilirsiniz.
Selamlar! Emekleriniz için teşekkürler, harika bir iş çıkarıyorsunuz.
Bir gösterge yapıyorum, ancak EquationDirect işlevi bazen çizgi kesişme noktasını yanlış hesaplıyor :(
Grafikte sahip olduğum çizgi noktalarını hesapladım ve netlik için test göstergesine ekledim. Fonksiyon bir offset ile kesişimi doğru hesaplamıyor, yani bir açıda fonksiyondaki formül uymuyor ve bir şekilde düzeltilmesi gerekiyor ki bu tür hesaplamalar yapıldığında farklı bir formüle göre yapılsın. Benim nacizane fikrime göre
ekran
opera aracılığıyla eklendi, gezgine eklenmedi
grafikte görünen aşırı zamanı (soldan) nasıl belirleyebilirim?
ZamanAkımı()
ZamanAkımı()
Bu sağda görünüyor.
çoktan anladım
kesişme noktasının bir ofset ile gerçekleşmesi nedeniyle, bu EquationDirect işlevinden kaynaklanmaz, hesaplama doğru yapılır, bu terminaldeki bir tür hatadan kaynaklanır, çizgi bir ofset ile çizilir
bu yüzden önce Zaman[0] ile kesişme noktasını belirlemem ve ardından başlangıç noktasından Zaman[0] ile kesişme noktasına bir eğilim çizgisi çizmem gerekiyordu, bu durumda her şey yolunda gidiyor
Gösterge sinyalinin anahtar simgesini ( grafik ölçeği değiştiğinde) konumlandırmak için grafikte en doğru zamana ihtiyacım var, yani anahtar simgesini en doğru zamanın ötesine taşırsanız, yani henüz gelmemiş simge anahtarlar (sinyal, sipariş vermek için açılır veya kapanır, yani, danışmanın ticaret yapmasına izin vermek veya yasaklamak için sinyali değiştirerek yapabilirsiniz)
ve aşırı sol zaman şu şekilde tanımlanır: grafikte görünen aşırı çubuğu elde ederiz
WindowFirstVisibleBar() ve ondan zamanı alın Time[WindowFirstVisibleBar()]