Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 971

 
korobok777 :
Kod olmadan hiçbir şey söylenemez.
 

Tünaydın. Burada aşırı alım / aşırı satım bölgelerinden RSI çıkışı için basit bir gösterge yazdım - işe yarıyor

Doğru, oklar gerektiğinde çizer. Ama sadece gerçek zamanlı olarak.

Soru: n'inci çubuk sayısı için tarihe nasıl çizilir?

#özellik göstergesi_chart_window
#özellik göstergesi_tamponları 2
#özellik göstergesi_color1 KireçYeşil
#özellik göstergesi_color2 KireçYeşil

çift rsi,rsi1,rsi2;
çift Çapraz[];
çift CrossDown[];
int BAYRAK = 0;
int FLAG1 = 2;
bool New_Bar=false;
int init()
{
//---- göstergeler
SetIndexStyle(0,DRAW_OK,5,1);
SetIndexArrow(0, 233);
SetIndexBuffer(0, CrossUp);
SetIndexStyle(1,DRAW_OK,5,1);
SetIndexArrow(1, 234);
SetIndexBuffer(1, CrossDown);
//----
dönüş(0);
}
//+------------------------------------------- --------------------+
//| özel gösterge sıfırlama işlevi |
//+------------------------------------------- --------------------+
int tanım()
{
//----

//----
dönüş(0);
}
int başlangıç()
{

rsi = iRSI(NULL,0,4,PRICE_CLOSE,0);
rsi1 = iRSI(NULL,0,4,PRICE_CLOSE,1);
rsi2 = iRSI(NULL,0,4,PRICE_CLOSE,2);



Fun_New_Bar();
int limit, i, sayaç;
çift Aralık, AvgRange;
for(i = 0; i <= limit; i++) {
sayaç=i;
aralık = 0;
OrtAralık=0;
for (sayaç=i ;sayaç<=i+9;sayaç++)
{
AvgRange=AvgRange+MathAbs(Yüksek[sayaç]-Düşük[sayaç]);
}
Aralık=OrtAralık/10;
if (FLAG<1 && rsi<rsi2 && rsi2>70 && rsi1<70)
{ Uyarı ("RSI AŞAĞI!!!", Sembol());
CrossDown[i] = Yüksek[i]+ Aralık*1.8;
BAYRAK=1;}
if(FLAG1>1 && rsi>rsi2 && rsi2<30 && rsi1>30)
{ Uyarı ("RSI UP!!! on ", Symbol());
CrossUp[i] = Düşük[i]- Aralık*1.8;
BAYRAK1 = 1; }
if( New_Bar==doğru)
{BAYRAK=0;}
if( New_Bar==doğru)
{FLAG1=2;}
}
dönüş(0);
}
geçersiz Fun_New_Bar()
{
statik tarihsaat New_Time=0;
New_Bar=yanlış;
if(New_Time!=Zaman[0])
{
New_Time=Zaman[0];
New_Bar=true;
}
}
 
Vinin :
Kod olmadan hiçbir şey söylenemez.
 //==================================================================+
extern ENUM_TIMEFRAMES PERIOD_= PERIOD_H1 ; //Периоды графиков
//==================================================================+

string _ChartSymbol;
long    _ChartID,
       _ChartFirst,
       _ChartPeriod;
int start()
{ //---идентификатор графика начиная с первого 
    _ChartFirst= ChartFirst ();
if (_ChartFirst> 0 ) //если идентификатор больше ноля
{
 _ChartSymbol= ChartSymbol (_ChartFirst); //символ графика
 _ChartPeriod= ChartPeriod (_ChartFirst); //Периоды графика
 //---выполним функцию конвертации периода если не совпадает
if ( _ChartPeriod!=PERIOD_)
 {
   bool   ch= ChartSetSymbolPeriod (_ChartFirst,_ChartSymbol,PERIOD_);
 } 
}
return ( 0 );
}
int   deinit()
{
Alert ( "скрипт закончил работу" );
return ( 0 );
}
bu yalnızca ilk grafik içindir, ardından açılır pencere karışmaz.
 
Red_Manticore :

Tünaydın. Burada aşırı alım / aşırı satım bölgelerinden RSI çıkışı için basit bir gösterge yazdım - işe yarıyor

Doğru, oklar gerektiğinde çizer. Ama sadece gerçek zamanlı olarak.

Soru: n'inci çubuk sayısı için tarihe nasıl çizilir?


Kodu kurallara göre girin, önce okumalısınız! Video düğmesinin solundaki SRC'ye tıklayın ve "sayfayı" silin!

 #property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 LimeGreen
#property indicator_color2 LimeGreen

double rsi,rsi1,rsi2;
double CrossUp[];
double CrossDown[];
int FLAG = 0 ;
int FLAG1 = 2 ;
bool New_Bar= false ; 
 
int init()
  {
//---- indicators
  SetIndexStyle( 0 , DRAW_ARROW , 5 , 1 );
   SetIndexArrow( 0 , 233 );
   SetIndexBuffer ( 0 , CrossUp);
   SetIndexStyle( 1 , DRAW_ARROW , 5 , 1 );
   SetIndexArrow( 1 , 234 );
   SetIndexBuffer ( 1 , CrossDown);
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 

//----
   return ( 0 );
  }
int start()
{  

rsi = iRSI ( NULL , 0 , 4 , PRICE_CLOSE , 0 );
rsi1 = iRSI ( NULL , 0 , 4 , PRICE_CLOSE , 1 );
rsi2 = iRSI ( NULL , 0 , 4 , PRICE_CLOSE , 2 );



Fun_New_Bar(); 
  
   int limit, i, counter;
   double Range, AvgRange;
     for (i = 0 ; i <= limit; i++) {
   
      counter=i;
      Range= 0 ;
      AvgRange= 0 ;
       for (counter=i ;counter<=i+ 9 ;counter++)
      {
         AvgRange=AvgRange+ MathAbs (High[counter]-Low[counter]);
      }
      Range=AvgRange/ 10 ;
       if (FLAG< 1 && rsi<rsi2 && rsi2> 70 && rsi1< 70 )
      { Alert ( "RSI DOWN!!! on " , Symbol ());
      CrossDown[i] = High[i]+ Range* 1.8 ;
          FLAG = 1 ;} 
       if (FLAG1> 1 && rsi>rsi2 && rsi2< 30 && rsi1> 30 )
      { Alert ( "RSI UP!!! on " , Symbol ());
      CrossUp[i] = Low[i]- Range* 1.8 ;
         FLAG1 = 1 ; } 
   
       if ( New_Bar== true )
       {FLAG= 0 ;}
       if ( New_Bar== true )
       {FLAG1= 2 ;} 
   
   }
   return ( 0 );
  } 
  
   void Fun_New_Bar()                              
  {                                             
   static datetime New_Time= 0 ;                  
   New_Bar= false ;                               
   if (New_Time!=Time[ 0 ])                        
     { 
      New_Time=Time[ 0 ];                         
      New_Bar= true ;                            
     } 
  }     
ответить
 
korobok777 :
bu yalnızca ilk grafik içindir, ardından açılır pencere karışmaz.

Komut dosyası tüm açık çizelgeleri işler. Mevcut olan en son işlenir. Komut dosyaları, zaman çerçevesini değiştirirken çalışmalarını sonlandırdığından, komut dosyasının tamamlandığına dair bir uyarı içeren pencere yalnızca bir kez uçacaktır. Tüm grafiklerde, zaman çerçevesi belirtilene değişecektir.

 //+------------------------------------------------------------------+
//|                                             ReplaceTimeFrame.mq4 |
//|                                            Copyright 2015, Vinin |
//|                                             http://vinin.ucoz.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Vinin"
#property link        "http://vinin.ucoz.ru"
#property version    "1.00"
#property strict

#property show_inputs

input ENUM_TIMEFRAMES PERIOD_= PERIOD_H1 ; //Периоды графиков

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart ()
  {
   long id= ChartFirst ();
   long id_current= ChartID ();
   int i= 0 ;
   while (i< 100 )
     {
       ENUM_TIMEFRAMES _ChartPeriod= ChartPeriod (id); //Периоды графика
       if (_ChartPeriod!=PERIOD_ && id!=id_current)
        {
         bool   ch= ChartSetSymbolPeriod (id, ChartSymbol (id),PERIOD_);
        }

      id= ChartNext (id);
       if (id< 0 ){ break ;}
      i++;
     }
   ENUM_TIMEFRAMES _ChartPeriod= ChartPeriod (id_current); //Периоды графика
   if (_ChartPeriod!=PERIOD_)
     {
       bool   ch= ChartSetSymbolPeriod (id_current, ChartSymbol (id_current),PERIOD_);
     }
  }
 
Vinin :

Komut dosyası tüm açık çizelgeleri işler. Mevcut olan en son işlenir. Komut dosyaları, zaman çerçevesini değiştirirken çalışmalarını sonlandırdığından, komut dosyasının tamamlandığına dair bir uyarı içeren pencere yalnızca bir kez uçacaktır. Tüm grafiklerde, zaman çerçevesi belirtilene değişecektir.


Ai))) aferin!!!! Teşekkürler!!!
 

Tünaydın,

bir dizi bildirmek

double gdClose_array[];

ArrayResize(gdClose_array, 1);

Verileri, mevcut grafikten son kapatılan Çubuk tarafından kapatılarak diziye kopyalarım

iX=CopyClose(Symbol(), PERIOD_CURRENT ,1,1,gdClose_array) ;

Bir dizinin değerini al

double dX=NormalizeDouble(gdClose_array[0],Digits);

Print("NormalizeDouble(dX,Rakamlar)", dX);

Bir numara alıyorum, ancak açıkça doğru değil:

NormalizeDouble(dX, Rakamlar) 1.0644

Grafiğe göre (görselleştirme) yakınlarda böyle bir değer olmamasına rağmen

Ve bu değer test sırasında değişmez.

katma

ArraySetAsSeries(gdClose_array,true);

durum değişmedi

Hata nerede?

 
n0name :

Tünaydın,

...

Verileri, mevcut grafikten son kapatılan Çubuk tarafından kapatılarak diziye kopyalarım

iX=CopyClose(Symbol(),PERIOD_CURRENT,1,1,gdClose_array) ;

Burada , dizi öğesinin dizinini belirtmeden yalnızca dizinin adını yazdınız. Daha önce ArrayResize(gdClose_array, 1); dizi öğelerinin sayısını 1 olarak ayarlarsınız, ardından dizini 0 olur. Bu nedenle şunu yapmanız gerekir:

iX= CopyClose ( Symbol (), PERIOD_CURRENT , 1 , 1 ,gdClose_array[ 0 ]);


Ve birkaç soru/tavsiye daha.

1) Yalnızca 1 değeri hatırlamanız gerekiyorsa, dizi yerine bir değişken kullanabilirsiniz. Sonra yerine:

 double gdClose_array[];
ArrayResize (gdClose_array, 1 ); 

yapmak

 double gdClose_array;

ve sonra orijinal kodunuz olarak.

2) Bir diziye ihtiyacınız varsa, ancak bunun yalnızca 1 öğeye sahip olacağını hemen biliyorsanız, dinamik bir dizi bildirmek yerine hemen 1 öğeli statik bir dizi bildirin ve ardından boyutunu ayarlayın. Ek işlemlere gerek yoktur.

Yerine

 double gdClose_array[];
ArrayResize (gdClose_array, 1 );

yazmak

 double gdClose_array[ 1 ];

sonrasında

iX= CopyClose ( Symbol (), PERIOD_CURRENT , 1 , 1 ,gdClose_array[ 0 ]);

ve sonra orijinal kodunuz olarak.

 

Tünaydın! Programcılar için soru.

Bir emir açıldığında tetiklenen ve belirtilen puan sayısına göre zarar durdur ve üzerine kar alan bir danışman vardır.

Soru.

EA, kaybı durdurma yerine aynı hacimde bekleyen bir ters durdurma emri yerleştirecek şekilde kodu değiştirmek mümkün mü?

Bunun için kodda nelerin değiştirilmesi gerekiyor?

Teşekkür ederim.

 

Tünaydın!

Yine, muhtemelen temel bir şeyden çıkamıyorum - neden her şey yardımda görünüyor, ancak sonuç 0.0 yazdırıyor?

   double FractalDown_1 = iFractals ( NULL , 0 ,MODE_LOWER, 1 ); Print ( "FractalDown_1=" ,FractalDown_1);

Fraktal değer neden alınmıyor?

Neden: