이중 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),자리수);
이틀 동안 나는 고통을 겪고 그것을 알아낼 수 없습니다. 마지막 n개의 막대에 대한 최저가를 찾아야 하지만 현재 막대가 아닌 함수를 통해 받은 막대에서 찾아야 합니다. 함수는 주문이 열린 막대의 인덱스를 반환합니다. 역사상 가장 낮은 가격 n개의 막대를 찾아야 하는 것은 이 막대에서입니다. 아래는 내 코드입니다. 무엇이 잘못되었습니까?
int n = 10 ; //баров в глубь истории
index_bar= ND(iLow( Symbol (), 0 ,i)); // начинаем с этого бараdouble val=Low[iLowest( NULL , 0 ,MODE_LOW,n,index_bar)];
친애하는 포럼 사용자! 도움을 요청합니다.
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 변수를 보았으므로 오프닝을 조정하십시오.
이틀 동안 나는 고통을 겪고 그것을 알아낼 수 없습니다. 마지막 n개의 막대에 대한 최저가를 찾아야 하지만 현재 막대가 아닌 함수를 통해 받은 막대에서 찾아야 합니다. 함수는 주문이 열린 막대의 인덱스를 반환합니다. 역사상 가장 낮은 가격 n개의 막대를 찾아야 하는 것은 이 막대에서입니다. 아래는 내 코드입니다. 무엇이 잘못되었습니까?
이 같은
이 같은
매우 감사합니다! 나는 또한이 기능을 사용하려고 시도했지만 사이클에서 다시 만 모든 것이 간단하다는 것이 밝혀졌습니다.))) 다시 한 번 감사합니다!
기프토 :
다음 질문이 있습니다. 마우스 휠을 가로채는 방법, vinapi의 기능은 무엇입니까? 이유를 설명하겠습니다. externs는 int 매개변수를 포함합니다. 휠을 돌려서 늘리거나 줄여야 합니다.
방법을 찾으면 게시하십시오 ...
지금까지 나는 그것을 알아 냈습니다.
Vadim이 MT4에서 후크를 사용하지 말라고 말했듯이 플랫폼은 후크를 좋아하지 않으며 만지지도 않습니다. 아마도 헛된 것)