[Arşiv!] Ücretsiz danışman yazacağım - sayfa 11

 
skylord писал(а) >>

Merhaba.

Son zamanlarda MQL öğrenmeye yeni başladım, bir Uzman Danışman yazmaya çalışıyorum...

Expert Advisor sidus v.2 göstergesine dayalıdır.Uzman Danışmanın gösterdiği yönde sadece yeni bir bar doğduğunda yani ilk tikte var olup olmadığını kontrol etmesi gerekir. önceki çubukta bir sinyal ve hangisi Emirler - sabit bir dur ve al ile. İndikatör dosyasını ekliyorum...

Bu sinyali alamıyorum :(

Lütfen yardım edin veya bunu nasıl yapacağımı söyleyin...

Sidus göstergesinde Uzman Danışman

belki bu yardımcı olur veya arama yardımcı olur!

ya da ikinci bir rüzgar!

 

Teşekkür ederim vvava . Bu kesinlikle iyi, ancak göstergeden farklı olarak atlıyor ve çok fazla sol sinyal veriyor ve bu tam olarak gerekli değil (

Bana iş parçacığının kim olduğunu söyle , danışmandan önceki çubuktaki gösterge arabelleğinin durumunu nasıl isteyebilirim? arabelleği şu şekilde doldurursa:

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = Yüksek[i-1]-5*Nokta;
//ExtMapBuffer3[i] = Sor;
giriş=doğru;
input_point=Sor;
}
else if (sigCurrent==2 && sigPrevious==1)
{
ExtMapBuffer3[i-1] = Düşük[i-1]-5*Nokta;
//ExtMapBuffer4[i] = Teklif;
giriş=doğru;
input_point=Teklif;

}
Danışmanın aşağıdaki gibi bir koşul eşleşmesine ihtiyacı var:

ikiye katlamak;
çift aşağı;
iç;

Up=iCustom(NULL, 0,"sidus_v.2", 3, 1 );
Aşağı=iCustom(NULL,0,"sidus_v.2",2, 1 );
//---- satış koşulları
if(Aşağı== Düşük )
{
res=OrderSend( Symbol() ,OP_SELL,Lots,Bid,3,0,0,"",MAGICMA,0,Kırmızı);
dönüş;
}
//---- satın alma koşulları
if(Yukarı== Yüksek )
{
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",MAGICMA,0,Mavi);
dönüş;
}

Ama bu doğru değil!!

Lütfen bana bu durumda nasıl devam edeceğimi söyle...

 

Merhaba.

Sessizce ticaret yapıyorum, 4 hindi kullanıyorum, direnç destek çizgileri, trendler, falan, falan, falan... Ekranda gözlerimi kırdım, türkiye'ye oklara (satın al, otur) ses sinyali eklememe yardım et. tarihte noktalı bir çizgi ile aynı oklar (üzerlerini geçti)

Dosyalar:
zigandzag.mq4  16 kb
 
skylord писал(а) >>

Merhaba.

Son zamanlarda MQL öğrenmeye yeni başladım, bir Uzman Danışman yazmaya çalışıyorum...

Expert Advisor sidus v.2 göstergesine dayalıdır.Uzman Danışmanın gösterdiği yönde sadece yeni bir bar doğduğunda yani ilk tikte var olup olmadığını kontrol etmesi gerekir. önceki çubukta bir sinyal ve hangisi Emirler - sabit bir dur ve al ile. İndikatör dosyasını ekliyorum...

Bu sinyali alamıyorum :(

Lütfen yardım edin veya nasıl yapacağımı söyleyin...

Merhaba, kodu gözümle inceledim, kusura bakmayın tüyler ürpertici bir lamerim, yanılıyor olabilirim elbette ama gösterge yeniden çizmiyor mu? Mantıklı düşünmeye çalışalım

for(int i=0; i<limit; i++)
   {

sıfır çubuğundan geçmişteki tüm çubuklara kadar sayın, sayacı artırın.

ExtMapBuffer1 [ i ] = iMA ( NULL , 0 , FastEMA , 0 , MODE_EMA , PRICE_CLOSE , i ) ;
     ExtMapBuffer2 [ i ] = iMA ( NULL , 0 , SlowEMA , 0 , MODE_EMA , PRICE_CLOSE , i ) ;
     rsi_sig = iRSI ( NULL , 0 , RSIPeriod , PRICE_CLOSE , i ) ;

iyi, burada her şey açık

pipdiffCurrent=(ExtMapBuffer1[i]-ExtMapBuffer2[i]);

mcduck pshel

 if ( pipdiffCurrent > 0 & & rsi_sig > 50 ) 
     {
       sigCurrent = 1 ;    //Up
     }
     else if ( pipdiffCurrent < 0 & & rsi_sig < 50 )
     {
       sigCurrent = 2 ;    //Down

McDuck sıfırdan büyükse ve RSI 50'den büyükse, işaretimiz 1'dir ve daha azsa, o zaman 2.

her şey yolunda olduğu sürece

if (sigCurrent==1 && sigPrevious==2)
     {

yani ve burada O_o'yu anlamadım, eğer mcduck'un pozitif ve RSI'nin 50'den büyük olduğu ve mcduck'un negatif olduğu ve RSI'nin 50'den küçük olduğu koşulu aynı anda karşılanırsa... kod

sigPrevious=sigCurrent;

o zaman onları eşitleyebiliriz ...

Evet ve geleceği çalmak kötü bir biçimdir

ExtMapBuffer3[i-1]

Hayır, böyle olmayacak, şöyle değiştirelim veya daha doğrusu tamamen yeniden yapalım, mantığı zaten biliyoruz:

 #property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1 1
#property indicator_width2 1
//----
extern int        FastEMA = 14 ;
extern int        SlowEMA = 21 ;
extern int        RSIPeriod = 17 ;
//----
double BuyBuffer [ ] , SellBuffer [ ] ;
int pre_signal = 0 ;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init ( )
   {
     
//----
       SetIndexBuffer ( 0 , BuyBuffer ) ;
       SetIndexLabel ( 0 , "Buy" ) ;
       SetIndexStyle ( 0 , DRAW_ARROW , STYLE_SOLID , 1 ) ;
       SetIndexArrow ( 0 , 241 ) ;
//----
       SetIndexBuffer ( 1 , SellBuffer ) ;
       SetIndexLabel ( 1 , "Sell" ) ;
       SetIndexStyle ( 1 , DRAW_ARROW , STYLE_SOLID , 1 ) ;
       SetIndexArrow ( 1 , 242 ) ;
//----
       return ( 0 ) ;
   }

int deinit ( )
   {
      
   }

int start ( )
   {
  

       int counted_bars = IndicatorCounted ( ) ;

      
   int limit = Bars - 17 ;

   if ( counted_bars > 17 ) 
     { 
       limit = Bars - counted_bars ; 
     }

       for ( int i = limit ; i > = 0 ; i - - )
         {
             BuyBuffer [ i ] = EMPTY_VALUE ;
             SellBuffer [ i ] = EMPTY_VALUE ;       
             
                
                 double a = iMA ( NULL , 0 , FastEMA , 0 , MODE_EMA , PRICE_CLOSE , i + 1 ) ;
                 double s = iMA ( NULL , 0 , SlowEMA , 0 , MODE_EMA , PRICE_CLOSE , i + 1 ) ;
                 
                
                
                 double a1 = iMA ( NULL , 0 , FastEMA , 0 , MODE_EMA , PRICE_CLOSE , i ) ;
                 double s1 = iMA ( NULL , 0 , SlowEMA , 0 , MODE_EMA , PRICE_CLOSE , i ) ;
                 double d1 = iRSI ( NULL , 0 , RSIPeriod , PRICE_CLOSE , i ) - 50 ;
             //----
           if ( a < s & & a1 > s1 & & d1 > 0 )
               {
                    BuyBuffer [ i ] = Low [ i ] - iATR ( NULL , 0 , 14 , i ) ;
                    
               }
             if ( a > s & & a1 < s1 & & d1 < 0 )
               {
                    SellBuffer [ i ] = High [ i ] + iATR ( NULL , 0 , 14 , i ) ;          
                    
               }
        
      
         }
       return ( 0 ) ;
   }

Ve şimdi bakın, üzücü bir tablo çıkıyor, karşılaştırın:

Elbette yanılıyor olabilirim ve gösterge yeniden çizilmez, ancak beni affet ve belki de açılış fiyatlarını (özellikle RSI'da) kullanmak ve kapanış fiyatlarını kullanmamak size yardımcı olacaktır, böylece sinyaliniz tam olarak çubukta görünecektir. olmalı =(

 

İlginiz için teşekkür ederim vtoroe_dyxanie ))) Tabii ki gösterge yazmadım, tüm gözlemlerime göre okumalarını yeniden çizmiyor. Zaten sabitlendiğinde bir sonraki çubuğun ilk kenesinden itibaren kullanıyorum. Bu nedenle, ilk onay işaretinde, önceki çubukta ne olduğunu danışmandan öğrenmem gerekiyor??? Neden geleceği çalıyor? O, belirli bir kene üzerinde, böyle bir eşleşme varsa, sigCurrent bir tane atar ve sigPrevious değişkeninin sonunda aynı sigCurrent'ı atar:

sigPrevious=sigCurrent;

ve sonraki onay işaretinde, sigCurrent zaten 2'ye eşitse ve sigPrevious değişkeni arabelleği doğal olarak 1 ile dolduruyorsa:

if (sigCurrent==1 && sigPrevious==2)
  {
  ExtMapBuffer4[i-1] = High[i-1]-5*Point;
  //ExtMapBuffer3[i] = Ask;
  entry=true;
  entry_point=Ask;
  } 

Ve bunun fırçasında:

ExtMapBuffer3[i-1]

kendimi tam olarak anlayamıyorum...

Ancak iyi çalışıyor gibi görünüyor, sinyalin göründüğü çubuğa oklar çiziliyor!

Ancak -1 kaldırıldı, birçok sürpriz vardı (



 
skylord >> :

İlginiz için teşekkür ederim vtoroe_dyxanie ))) Tabii ki gösterge yazmadım, tüm gözlemlerime göre okumalarını yeniden çizmiyor. Zaten sabitlendiğinde bir sonraki çubuğun ilk kenesinden itibaren kullanıyorum. Bu nedenle, ilk onay işaretinde, önceki çubukta ne olduğunu danışmandan öğrenmem gerekiyor??? Neden geleceği çalıyor? O, belirli bir kene üzerinde, böyle bir eşleşme varsa, sigCurrent bir tane atar ve sigPrevious değişkeninin sonunda aynı sigCurrent'ı atar:

sigPrevious=sigCurrent;

ve sonraki onay işaretinde, sigCurrent zaten 2'ye eşitse ve sigPrevious değişkeni arabelleği doğal olarak 1 ile dolduruyorsa:

if (sigCurrent==1 && sigPrevious==2)
  {
  ExtMapBuffer4[i-1] = High[i-1]-5*Point;
  //ExtMapBuffer3[i] = Ask;
  entry=true;
  entry_point=Ask;
  } 

Ve bunun fırçasında:

ExtMapBuffer3[i-1]

kendimi tam olarak anlayamıyorum...

Ancak iyi çalışıyor gibi görünüyor, sinyalin göründüğü çubuğa oklar çiziliyor!

Ancak -1 kaldırıldı, birçok sürpriz vardı (



Ama başka bir yan etkisi var. Bazen şartlar sağlandığında sinyal verir ve ok çekmez. Ama grafiğe yeniden attığımda tüm oklar yerine oturuyor. Belki bir şekilde bunu grafikte yeniden "derlenmesi" veya arabelleklerini yeniden güncellemesi için yapabilirsiniz ???

 
skylord писал(а) >>

Neden geleceği çalıyor? O, belirli bir kene üzerinde, böyle bir eşleşme varsa, sigCurrent bir tane atar ve sigPrevious değişkeninin sonunda aynı sigCurrent'ı atar:

sigPrevious=sigCurrent;

ve sonraki onay işaretinde, sigCurrent zaten 2'ye eşitse ve sigPrevious değişkeni arabelleği doğal olarak 1 ile dolduruyorsa:

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}



Senin gerçeğin, dikkatsizim ...

Hakkında: "Zaten düzeldiğinde, sonraki çubuğun ilk tik işaretinden itibaren kullanıyorum. Bu nedenle, ilk tikte, önceki çubukta ne olduğunu danışmanda öğrenmem gerekiyor ??? "Gerçekten merak ediyorum. kullanmak mümkün

çift iCustom ( .... int kaydırma)

her şeyi bilen referans diyor ki

vardiya - Gösterge arabelleğinden alınan değerin dizini (geçerli çubuğa göre belirtilen dönem sayısı kadar önce kayma).

ilginç, ama yazabilirsin (bana ilginç geldi)

for (i=0; i<limit;i++){

if (iCustom(NULL, 0,"sidus_v.2", 3, i+ 1 )<0 && iCustom(NULL, 0,"sidus_v.2", 3, i )>0)

....

Forumun sooooo Smart üyelerinin iki noob'a inmesi pek mümkün olmadığından, becerilerimi kendi başıma geliştirmek için ayrıldım, çünkü kullanışlı olabilir.

 
vtoroe_dyxanie писал(а) >>

Senin gerçeğin, dikkatsizim ...

Hakkında: "Zaten düzeldiğinde, sonraki çubuğun ilk tik işaretinden itibaren kullanıyorum. Bu nedenle, ilk tikte, önceki çubukta ne olduğunu danışmanda öğrenmem gerekiyor ??? "Gerçekten merak ediyorum. kullanmak mümkün

çift iCustom ( .... int kaydırma)

her şeyi bilen referans diyor ki

vardiya - Gösterge arabelleğinden alınan değerin dizini (geçerli çubuğa göre belirtilen dönem sayısı kadar önce kayma).

ilginç, ama yazabilirsin (bana ilginç geldi)

for (i=0; i<limit;i++){

if (iCustom(NULL, 0,"sidus_v.2", 3, 1 )<0 && iCustom(NULL, 0,"sidus_v.2", 3, 0 )>0)

....

Forumun sooooo Smart üyelerinin iki noob'a inmesi pek mümkün olmadığından, becerilerimi kendi başıma geliştirmek için ayrıldım, çünkü kullanışlı olabilir.

Hayır, işe yaramayacak =(

Lanet olsun, ama o zaman bu sorunu nasıl çözecek? Pekala, zaten dalı yükselttiğiniz için: https://www.mql5.com/en/forum/117268 takip edeceğiz =)

 
vtoroe_dyxanie писал(а) >>

Hayır, işe yaramayacak =(

Lanet olsun, ama o zaman bu sorunu nasıl çözecek? Pekala, zaten bir dal yükselttiğiniz için: 'Bir danışmandan yön nasıl öğrenilir' izleyeceğiz =)

şirket için gözetime katılabilirsiniz!?)

 
vtoroe_dyxanie писал(а) >>

Hayır işe yaramaz =(

Lanet olsun, ama o zaman bu sorunu nasıl çözecek? Pekala, zaten bir dal yükselttiğiniz için: 'Bir danışmandan yön nasıl öğrenilir' izleyeceğiz =)

Hey! Senden yardım istediğimi hatırlıyor musun? Zor değilse bana bir tavsiye verebilir misin? o zaman benim için yaptığın şey az önce yazdığım şey (göstergenin en yakın aşırı zaman dilimlerini tek bir pencerede göstermesini istedim!) bu mu????

Dosyalar:
test1.mq4  6 kb
Neden: