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

 
alexey1979621 :

Sevgili forum kullanıcıları! Büyük yardım talebi.


if (TimeBar==Time[0]) return(0);


double MA1 = NormalizeDouble(iMA(NULL,TimeFrame_2,MA_Period_2,MA_Shift_2,MA_Method_2,Applied_Price_2,0),Digits); // burada 0, belirtilen çubuğa göre geçerli çubuğa göre bir kaymadır. önceki dönem sayısı
//double MA21 = NormalizeDouble(iMA(NULL,timeframe_2,period_2,ma_shift_2,ma_method_2,applied_price_2,2),Digits);
double MA2 = NormalizeDouble(iMA(NULL,TimeFrame_3,MA_Period_3,MA_Shift_3,MA_Method_3,Applied_Price_3,0),Digits);
//double MA31 = NormalizeDouble(iMA(NULL,timeframe_3,period_3,ma_shift_3,ma_method_3,applied_price_3,2),Digits);
double MA3 = NormalizeDouble(iMA(NULL,TimeFrame_4,MA_Period_4,MA_Shift_4,MA_Method_4,Applied_Price_4,0),Digits);

double OsMA = NormalizeDouble(iOsMA(NULL,TimeFrame_5,FastEMA_5,SlowEMA_5,SignalSMA_5,Applied_Price_5,0),Digits);

if (MaxOrders>b && Düşük[0]>=MathMax(MA1,MA2)&& Düşük[0]>MA3 && Sor>MathMax(MA1,MA2)+DeltaOpen*Nokta && Sor>MA3 && MA2<MA3 && MA1<MA3 && OsMA>0 && Ticaret)
{
if (OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,SL,TP,"Puria_1",Magic,0,Blue) ==-1) TimeBar=0;
başka TimeBar=Zaman[0];

}
if (MaxOrders>s && Yüksek[0]<=MathMin(MA1,MA2) && Yüksek[0]<MA3 && Bid<MathMin(MA1,MA2)-DeltaOpen*Point && Bid<MA3 && MA1>MA3 && MA2>MA3 && OsMA<0 && Ticaret)
{
if (OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slippage,SL,TP,"Puria_1",Magic,0,Red) ==-1) TimeBar=0;
başka TimeBar=Zaman[0];
}

dönüş(0);


Bu koşullarla danışman, diyelim ki SATIŞ'ta bir anlaşma açar, kârla kapatır ve hemen SAT'ta başka bir anlaşma açar. Danışmana, bir sinyal geldiğinde, yalnızca bir işlemin açılması gerektiğini, yani. bir sinyal - bir anlaşma.
Şimdiden teşekkürler.



Seçenek 1 - ya anlaşmanın koşulunu kontrol edin, böylece: endeks 2 bir alış sinyali ve endeks 1 satış için gösterir, ardından endeks 0 ile çubuğun açılışında bir satış anlaşması açılacaktır.

Seçenek 2 - emirlerin geçmişini kontrol edin ve sinyal ve emir endekslerini karşılaştırın, eğer eşleşirlerse artık emir açmayın.

 

TimeBar değişkeni nerede ve nasıl başlatılır?

Gerçi senin durumunda pek yardımcı olmayacak. Koşullarda Ticaret değişkenini görüyorum, bu yüzden açılışı onunla ayarlayın.

 
webman1988 :

İkinci gün acı çekiyorum ve çözemiyorum. Son n çubuk için en düşük fiyatı bulmanız gerekir, ancak mevcut çubuktan değil, işlev aracılığıyla alınan çubuktan. İşlev, emrin açıldığı çubuğun dizinini döndürür. Bu çubuktan, tarihteki en düşük fiyat n çubuklarını bulmanız gerekiyor. Aşağıda kodum, yanlış olan ne?



 int n = 10 ;   //баров в глубь истории 

index_bar= ND(iLow( Symbol (), 0 ,i)); // начинаем с этого бара

double val=Low[iLowest( NULL , 0 ,MODE_LOW,n,index_bar)];
bunun gibi bir şey
 
r772ra :


bunun gibi bir şey

Çok teşekkürler! Ayrıca bu işlevi kullanmayı denedim, sadece bir döngüde tekrar, her şeyin basit olduğu ortaya çıktı))) Tekrar teşekkürler!
 
FAQ :

hediye :

Aşağıdaki sorum var. Fare tekerleği nasıl durdurulur, vinapi'nin işlevleri nelerdir? nedenini açıklayacağım. Extern'ler bir int parametresi içerir. Artırmak veya azaltmak için tekerleği döndürmeniz gerekir.


Nasıl yapılacağını öğrendiğinde, yayınla...

Şimdiye kadar sadece anladım:

 #property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 RoyalBlue
#import "user32.dll"
         int GetKeyState( int nVirtKey); //обрабочик клавиатуры
#import

extern int        period = 1 ;
extern bool       WinAPI = false ;//включение-отключение перехвата клавиатуры
extern string     s1= "Alt+ArrowUp - increment of period" ;//памятка
extern string     s2= "Alt+ArrowDown - decrement of period" ;
extern string     s3= "Alt+Home - period=1" ;

double SMA[];
int Alt, ArrowUp, ArrowDown, Home;

int init(){
    SetIndexStyle( 0 , DRAW_LINE );
     SetIndexBuffer ( 0 ,SMA);
     if (WinAPI){//запоминаем состояние клавиш
        Alt = GetKeyState( 18 );
        ArrowUp = GetKeyState( 38 );
        ArrowDown = GetKeyState( 40 );
        Home = GetKeyState( 36 );
    }
     return ( 0 );
}

int deinit(){
     if (WinAPI) Comment ( " " );
     return ( 0 );
}

int start(){
     if (WinAPI){//ставим сконденсированный флаг и снова запоминаем состояние клавиш НА КАЖДОМ ТИКЕ
        int flag = ((Alt!=GetKeyState( 18 )) && Home==GetKeyState( 36 )) + 10 *((Alt!=GetKeyState( 18 )) && (ArrowUp==GetKeyState( 38 ))) + 100 *((Alt!=GetKeyState( 18 )) && (ArrowDown==GetKeyState( 40 )));
        Alt = GetKeyState( 18 );
        ArrowUp = GetKeyState( 38 );
                ArrowDown = GetKeyState( 40 );
        Home = GetKeyState( 36 );
    }
     int     counted_bars=IndicatorCounted();
     if (WinAPI){//разводка сконденсированного флага; перед limit, чтобы отсюда эмулировать прикрепление к графику
        switch (flag){
             case 11 : 
                    if (period> 1 ){
                            period--; 
                            counted_bars = 0 ;
                    } 
                    break ;
            case 101 : 
                    period++; 
                    counted_bars = 0 ; 
                    break ;
            case 110 : 
                    period= 1 ; 
                    counted_bars = 0 ;
            }
        }
         int limit = Bars - counted_bars - 1 ;
         /*Шпаргалка. В первый заход counted_bars = 0, limit = Bars - 1 (номер самого левого БАРа, т.к. считается с нуля)
        на первом тике нулевого бара counted_bars = Bars - 2, limit = 1 (пересчитаем предпоследний БАР)
        на следующих тиках counted_bars = Bars - 1, limit = 0 (нулевой, он же текущий, БАР)*/
         if (WinAPI) Comment ( "flag=" , flag, ", period=" , period);//принтуем в коммент для визуализации
        for ( int bar= 0 ; bar<=period*(limit/period); bar++){//обычный цикл индикаторов
                SMA[bar] = iMA(NULL, 0, period, 0, MODE_SMA, PRICE_CLOSE, bar);
        }
        return ( 0 );
}
 
Bu ilginç değil, soru fare tekerleğini engellemekte: https://www.mql5.com/ru/forum/139237
 
FAQ , bu konuyu bu konu ile iletişim kurmadan önce gördüm, bu yüzden soruya verdiğiniz tepkiye şaşırmadım)
 
Soru kancalarla ilgili, bu sorunu daha basit bir şekilde çözmeme rağmen - gerekirse DLL'de kendi ayar penceremi yapıyorum ve orada zaten windows kontrolleriyle istediğimi yapıyorum.
 
Vadim bana MT4'ün altındaki kancaları kullanmamamı söylediği için platform onları sevmiyor, onlara dokunmuyorum. Belki boşuna)
 
gyfto :
Vadim bana MT4'ün altındaki kancaları kullanmamamı söylediği için platform onları sevmiyor, onlara dokunmuyorum. Belki boşuna)
Bu MT4'ün kendisi kancalardan hoşlanmaz, ancak altından (DLL'den) başkalarına kanca uygulayabilirsiniz.