포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 64

 
alexey1979621 :

친애하는 포럼 사용자! 도움을 요청합니다.


if (TimeBar==시간[0]) return(0);


이중 MA1 = NormalizeDouble(iMA(NULL,TimeFrame_2,MA_Period_2,MA_Shift_2,MA_Method_2,Applied_Price_2,0),자리수); // 여기서 0은 지정된 만큼 현재 막대를 기준으로 한 이동입니다. 이전 기간 수
//더블 MA21 = NormalizeDouble(iMA(NULL,timeframe_2,period_2,ma_shift_2,ma_method_2,applied_price_2,2),Digits);
이중 MA2 = NormalizeDouble(iMA(NULL,TimeFrame_3,MA_Period_3,MA_Shift_3,MA_Method_3,Applied_Price_3,0),자리수);
//더블 MA31 = NormalizeDouble(iMA(NULL,timeframe_3,period_3,ma_shift_3,ma_method_3,applied_price_3,2),Digits);
이중 MA3 = NormalizeDouble(iMA(NULL,TimeFrame_4,MA_Period_4,MA_Shift_4,MA_Method_4,Applied_Price_4,0),자리수);

이중 OsMA = NormalizeDouble(iOsMA(NULL,TimeFrame_5,FastEMA_5,SlowEMA_5,SignalSMA_5,Applied_Price_5,0),자리수);

if (MaxOrders>b && Low[0]>=MathMax(MA1,MA2)&& Low[0]>MA3 && Ask>MathMax(MA1,MA2)+DeltaOpen*Point && Ask>MA3 && MA2<MA3 && MA1<MA3 && OSMA>0 && 무역)
{
if (OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,SL,TP,"Puria_1",Magic,0,Blue) ==-1) TimeBar=0;
else TimeBar=시간[0];

}
if (MaxOrders>s && High[0]<=MathMin(MA1,MA2) && High[0]<MA3 && Bid<MathMin(MA1,MA2)-DeltaOpen*Point && Bid<MA3 && MA1>MA3 && MA2>MA3 && OSMA<0 && 무역)
{
if (OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slippage,SL,TP,"Puria_1",Magic,0,Red) ==-1) TimeBar=0;
else TimeBar=시간[0];
}

리턴(0);


이러한 조건에서 고문은 예를 들어 SELL에서 거래를 열고 이익으로 닫고 즉시 SELL에서 다른 거래를 엽니다. 신호가 도착하면 하나의 거래만 열려야 한다는 조언자를 작성하는 방법, 즉 하나의 신호 - 하나의 거래.
미리 감사드립니다.



옵션 1 - 거래 조건을 확인하여 지수 2가 매수 신호를 나타내고 지수 1이 매도 신호를 표시한 다음 지수 0이 있는 막대가 열릴 때 매도 거래가 열립니다.

옵션 2 - 주문 내역을 확인하고 신호 및 주문 지수를 비교합니다. 일치하는 경우 더 이상 주문을 열지 않습니다.

 

TimeBar 변수는 어디서 어떻게 초기화됩니까?

귀하의 경우에는별로 도움이되지 않습니다. 조건에서 Trade 변수를 보았으므로 오프닝을 조정하십시오.

 
webman1988 :

이틀 동안 나는 고통을 겪고 그것을 알아낼 수 없습니다. 마지막 n개의 막대에 대한 최저가를 찾아야 하지만 현재 막대가 아닌 함수를 통해 받은 막대에서 찾아야 합니다. 함수는 주문이 열린 막대의 인덱스를 반환합니다. 역사상 가장 낮은 가격 n개의 막대를 찾아야 하는 것은 이 막대에서입니다. 아래는 내 코드입니다. 무엇이 잘못되었습니까?



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

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

double val=Low[iLowest( NULL , 0 ,MODE_LOW,n,index_bar)];
이 같은
 
r772ra :


이 같은

매우 감사합니다! 나는 또한이 기능을 사용하려고 시도했지만 사이클에서 다시 만 모든 것이 간단하다는 것이 밝혀졌습니다.))) 다시 한 번 감사합니다!
 
FAQ :

기프토 :

다음 질문이 있습니다. 마우스 휠을 가로채는 방법, vinapi의 기능은 무엇입니까? 이유를 설명하겠습니다. externs는 int 매개변수를 포함합니다. 휠을 돌려서 늘리거나 줄여야 합니다.


방법을 찾으면 게시하십시오 ...

지금까지 나는 그것을 알아 냈습니다.

 #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 );
}
 
이것은 흥미롭지 않습니다. 질문은 마우스 휠을 가로채는 것입니다: https://www.mql5.com/en/forum/139237
 
FAQ , 이 스레드에 연락하기 전에 이 주제를 보았으므로 질문에 대한 귀하의 반응에 놀라지 않았습니다.)
 
이 문제를 더 간단한 방법으로 해결했지만 문제는 후크에 관한 것입니다. 필요한 경우 DLL에서 자체 설정 창을 만들고 거기에서 이미 Windows 컨트롤로 원하는 작업을 수행합니다.
 
Vadim이 나에게 MT4에서 후크를 사용하지 말라고 말했듯이 플랫폼은 후크를 좋아하지 않으며 만지지도 않습니다. 아마도 헛된 것)
 
gyfto :
Vadim이 MT4에서 후크를 사용하지 말라고 말했듯이 플랫폼은 후크를 좋아하지 않으며 만지지도 않습니다. 아마도 헛된 것)
이 MT4 자체는 후크를 좋아하지 않지만 그 아래(DLL에서)에서 후크를 다른 사람에게 적용할 수 있습니다.