KimIV'ten faydalı özellikler - sayfa 96

 
KimIV >> :

Hiçbir şey eklemeye gerek yok... zaten sıralı


Çok teşekkürler !

Şubeniz internette bir hazine, bulduklarıma çok sevinmedim.

 
KimIV >> :

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

???

 
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_window

extern int SignalBars = 30 ;              // кол-во баров для сигнала
extern int TrendBars = 300 ;              // кол-во баров для т. линий
extern color CostMaxColor = FireBrick ;   // цвет максимальной цены
extern color CostMinColor = SteelBlue ;   // цвет минимальной цены
extern color VLineColor = DarkSlateGray ; // цвет минимальной цены
extern color TrendColor = Gray ;          // цвет трендовых линий
extern color OrderColor = Green ;         // цвет сигнала ордера
extern color 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     - значение, для которого вычислить Y

  if ( x2 = = x1 ) return ( y1 ) ;
  else
  return ( 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 ) ;
}
 

ekran

opera aracılığıyla eklendi, gezgine eklenmedi

 
grafikte görünen aşırı zamanı (soldan) nasıl belirleyebilirim?
 
DECIDE писал(а) >>
grafikte görünen aşırı zamanı (soldan) nasıl belirleyebilirim?

ZamanAkımı()

 
KimIV писал(а) >>

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()]

Neden: