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

 
artmedia70 :
배열의 크기는 0입니다. ArrayResize()를 잊지 말고 원하는 배열 크기를 즉시 설정하십시오.
감사합니다. 다르게 했습니다. 표시기에서 ArrayMaximum()을 찾아 iCustom 을 통해 EA로 값을 전달했습니다. :)
 
모두에게 좋은 하루! 특별한 방법으로 따옴표를 계산하고 필요한 계수로 파일을 생성 하는 외부 DLL의 호출을 사용하는 스크립트가 있습니다. 스크립트가 일정에 따라 작동하도록 하는 방법이 있습니까? 매일 특정 시간에 실행해야 합니까?
 

여보세요,

그림에 표시:

첫 번째 창은 거래량 표시기이며 맨 위에 자금 흐름 지수(10)를 놓습니다.

나는 별도의 지표를 만들었습니다. 여기서 다시 Volume을 취하고 Volume에서 이동을 다시 계산하고 첫 번째 창에서와 같이 25%, 50%, 75%를 시도했습니다.

그러나 그가 하는 방식은 그다지 좋지 않았습니다.

누군가이 문제를 겪었다면 공유하십시오.

감사해요

 #property indicator_separate_window
#property indicator_buffers 2
#property indicator_minimum 0

#property indicator_width1 2
#property indicator_width2 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Yellow

extern int MAPeriod = 30;
double     volum[],ma[];
//+------------------------------------------------------------------+
int init(){
    int bars_count=WindowBarsPerChart(),volh;
    int bar=WindowFirstVisibleBar();
    volh = Volume[iHighest(Symbol(),0,MODE_VOLUME,bar,0)];
    SetIndexBuffer(0,volum);
    SetIndexBuffer(1,ma);
    SetIndexStyle(0,DRAW_HISTOGRAM);
    SetIndexStyle(1,DRAW_LINE);
    SetLevelValue (0,   volh*1.05); 
    SetLevelValue (1, ((volh*1.05)/100)*75.0); 
    SetLevelValue (2, ((volh*1.05)/100)*50.0);
    SetLevelValue (3, ((volh*1.05)/100)*25.0); 
    return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
/*int start(){
    int limit;
        limit = Bars-IndicatorCounted()-1;
    for(int i=limit;i>=0;i--){
        volum[i] = NormalizeDouble(Volume[i],0);
        ma[i]    = NormalizeDouble(iMAOnArray(volum,0,MAPeriod,0,MODE_SMA,i),0);
       }
   return(0);
  }*/
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
    int i=rates_total-prev_calculated-1;
    if(i<0)
       i=0; 
    while(i>=0){
      if(i<rates_total-1)
        volum[i] = NormalizeDouble(Volume[i],0);
        ma[i]    = NormalizeDouble(iMAOnArray(volum,0,MAPeriod,0,MODE_SMA,i),0);
        i--;
       }     
   return(rates_total);
  }
 
tara :
그는 빼기 두 번째 막대에 대해 이야기했습니다. 그리고 제한의 평균 값에 대해. 조롱하고 싶어, imhenko. 나는 그것을 보낼 것이고 당신은 - 아시다시피 :)
그런 나라 벨로루시가 없다는 것을 아직도 모르는 리피터 7 학년은 1 학년에게 가서 방황했습니다. 그리고 어떤 질문에도 그는 보내거나 가르칩니다. 그들은 공부해야한다고 말합니다. 당신이 속한 지점의 문 위에 있는 글을 주의 깊게 읽으십시오. 나는 알파벳을 배울 뿐이니 너무 붓지 마, 나는 아직도 이해하지 못한다.
 

그리고 evilliveartmedia70은 매우 감사합니다. 당신의 인내와 시간을 위해. 당신에 대한 나만의 생각이 아니라고 확신합니다. 이 스레드를 찾는 모든 사람은 도움을 요청하고 주로 귀하로부터 도움을 받습니다. 감사해요\

 

안녕하세요 친애하는 프로들이 오랫동안 당신에게 연락하지 않았습니다

결론은 주문 개시와 함께 2개의 움직임이 교차하는 고문이 있다는 것입니다. 그들은 거기에 신경 쓰지 않았습니다.

무효 거래()

{ 이중 ma_fast=ma( Period_ ,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt)))

{

if(sumSO>0 && !ClosePos(OP_SELL)) 반환;

if(MO(OP_BUY,GetLot(),GetComment())==-1) 반환;

if(!ModifyByTicket(T)) 반환;

NumUp=0; NumDn=0;

}

또 다른

등..

즉, 거리의 교차점이 있는 경우 주문을 엽니다.

말하자면 마지막 교차로의 시간을 찾는 코드가 필요합니다.

현재 순간부터 역사의 설정 시간까지, 나는 마침표에 해당하는 주문을 찾고 .. 내가 찾지 못하면 주문을 엽니 다.

이러한 목적을 위해 트레이서 표시기의 코드를 찢었습니다. 모든 것이 명확해 보입니다.

그러나 곡선의 교차점 이후 첫 번째 막대의 시간을 감지하는 방법은 다음과 같습니다. 극우라고 해도 명확하지 않습니다.

for 연산자가 필요하다고 생각하지만 공식화할 수 없습니다.

 
evillive :

그렇게 하는 것이 아닙니다. iCustom은 3개의 버퍼 모두에 대해 호출되며, 각 값은 해당 변수에 기록된 다음 이러한 값으로 필요한 작업을 수행합니다.

볼린저 밴드의 경우 참조의 예에 따라 두 번째 막대에서 개그가 필요하지 않습니다.

고맙습니다.

그러나 내 문맹으로 인해 나는 교과서를 끊임없이 뒤져야 했고 이것이 내가 파헤친 것입니다. 사용자 정의 지표 는 프로그램입니다 ... 저자의 알고리즘에 따라 작성된 것입니다. 그리고 매뉴얼에 따르면 iCustom 은 지정된 사용자 지정 표시기의 값을 반환합니다.

그러나 나는 어떤 커스텀 지표도 사용하지 않습니다.

내가 지정한 매개변수를 사용하여 이동 평균, 볼린저 밴드 및 스토캐스틱 오실레이터와 같은 지표라고 부를 수 있다면 표준 값을 추출해야 합니다. 물론, 나는 "포크 방법"으로 그것을합니다. 먼저 찾은 것, 그 다음 적용합니다. 그러나 당신이 제안한 옵션은 나에게도 옳지 않은 것 같습니다.

버퍼, 배열, 루프를 사용하지 않고 솔루션이 정말 없는 건가요? 나는 바다의 조약돌처럼 그들 안에 있습니다. 나는 즉시 익사합니다.

 
sannin :

안녕하세요 친애하는 프로들이 오랫동안 당신에게 연락하지 않았습니다

결론은 주문 개시와 함께 2개의 움직임이 교차하는 고문이 있다는 것입니다. 그들은 거기에 신경 쓰지 않았습니다.

무효 거래()

{ 더블 ma_fast=ma(Period_,Shift_,방법_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt)))

{

if(sumSO>0 && !ClosePos(OP_SELL)) 반환;

if(MO(OP_BUY,GetLot(),GetComment())==-1) 반환;

if(!ModifyByTicket(T)) 반환;

NumUp=0; NumDn=0;

}

또 다른

등..

즉, 거리의 교차점이 있는 경우 주문을 엽니다.

말하자면 마지막 교차로의 시간을 찾는 코드가 필요합니다.

현재 순간부터 역사의 설정 시간까지, 나는 마침표에 해당하는 주문을 찾고 .. 내가 찾지 못하면 주문을 엽니 다.

이러한 목적을 위해 트레이서 표시기의 코드를 찢었습니다. 모든 것이 명확해 보입니다.

그러나 곡선의 교차점 이후 첫 번째 막대의 시간을 감지하는 방법은 다음과 같습니다. 극우라고 해도 명확하지 않습니다.

for 연산자가 필요하다고 생각하지만 공식화할 수 없습니다.

이 Expert Advisor는 교차로에서 작동하지 않습니다. 여기에서 기준은 다음과 같습니다. 빠른 MA가 느린 MA보다 X핍만큼 높고 오픈 포지션 이 없는 경우 시장에 따라 오픈합니다.

교차로를 검색하려면 교차로 이전에 "빠른/느린 MA"와 교차로 이후에 "빠른/느린 MA" 값 쌍을 항상 가져와야 합니다. 즉, 위치가 바뀔 때 이를 감지하기 위해서입니다. . 즉

if(FastMA_2<SlowMA_2 && FastMA_1>SlowMA_1) - 첫 번째 막대와 두 번째 막대 사이에서 빠른 MA가 느린 MA를 아래에서 위로 교차했습니다.

무한 루프에서 제로 바에서 교차점을 찾을 때까지 검색합니다. 이것은 X + 1 막대가 될 것이며 X 막대, 즉 교차점 이후 가장 최근 막대의 시간이 필요합니다.

 
rapid_minus :

고맙습니다.

그러나 내 문맹으로 인해 나는 교과서를 끊임없이 뒤져야 했고 이것이 내가 파헤친 것입니다. 사용자 정의 지표는 프로그램입니다 ... 저자의 알고리즘에 따라 작성된 것입니다. 그리고 매뉴얼에 따르면 iCustom 은 지정된 사용자 지정 표시기의 값을 반환합니다.

그러나 나는 어떤 커스텀 지표도 사용하지 않습니다.

내가 지정한 매개변수를 사용하여 이동 평균, 볼린저 밴드 및 스토캐스틱 오실레이터와 같은 지표라고 부를 수 있다면 표준 값을 추출해야 합니다. 물론, 나는 "포크 방법"으로 그것을합니다. 먼저 찾은 것, 그 다음 적용합니다. 그러나 당신이 제안한 옵션은 나에게도 옳지 않은 것 같습니다.

버퍼, 배열, 루프를 사용하지 않고 솔루션이 정말 없는 건가요? 나는 바다의 조약돌처럼 그들 안에 있습니다. 나는 즉시 익사합니다.

맞습니다. Bollinger Bands를 사용할 때는 iCustom을 호출할 필요가 없지만 각 표시줄에 대해 별도로 iBands를 호출해야 합니다. 표시기를 호출 하지 않는 대안으로("버퍼, 배열, 루프를 사용하지 않음") - Expert Advisor에서 이 표시기를 계산하는 알고리즘을 구현하고 필요할 때 필요한 값을 읽습니다(예: 원하는 값만 읽을 수 있습니다. 결론만). 그러나 사이클과 배열 없이는 여전히 작동하지 않습니다.
 
sannin :

안녕하세요 친애하는 프로들이 오랫동안 당신에게 연락하지 않았습니다

결론은 주문 개시와 함께 2개의 움직임이 교차하는 고문이 있다는 것입니다. 그들은 거기에 신경 쓰지 않았습니다.

무효 거래()

{ 더블 ma_fast=ma(Period_,Shift_,방법_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt)))

{

if(sumSO>0 && !ClosePos(OP_SELL)) 반환;

if(MO(OP_BUY,GetLot(),GetComment())==-1) 반환;

if(!ModifyByTicket(T)) 반환;

NumUp=0; NumDn=0;

}

또 다른

등..

즉, 거리의 교차점이 있는 경우 주문을 엽니다.

말하자면 마지막 교차로의 시간을 찾는 코드가 필요합니다.

현재 순간부터 역사의 설정 시간까지, 나는 마침표에 해당하는 주문을 찾고 .. 내가 찾지 못하면 주문을 엽니 다.

이러한 목적을 위해 트레이서 표시기의 코드를 찢었습니다. 모든 것이 명확해 보입니다.

그러나 곡선의 교차점 이후 첫 번째 막대의 시간을 감지하는 방법은 다음과 같습니다. 극우라고 해도 명확하지 않습니다.

for 연산자가 필요하다고 생각하지만 공식화할 수 없습니다.

다음은 2개의 이동을 교차한 후 막대의 수를 측정하는 방법을 보여준 예입니다.
 datetime TimeStart = 0 ;
//+------------------------------------------------------------------+
int init(){ return ( 0 );}
int deinit(){ return ( 0 );}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int f;
   bool      cu1     = false ;
   bool      cu2     = false ;
   double    ma_1    = iMA ( NULL , 0 , 31 , 0 , MODE_SMA , PRICE_OPEN , 0 );
   double    ma1     = iMA ( NULL , 0 , 11 , 0 , MODE_SMA , PRICE_OPEN , 0 );
   double    ma_2    = iMA ( NULL , 0 , 31 , 0 , MODE_SMA , PRICE_OPEN , 1 );
   double    ma2     = iMA ( NULL , 0 , 11 , 0 , MODE_SMA , PRICE_OPEN , 1 );

   if (ma2<ma_2 && ma1>ma_1)
      TimeStart=Time[ 0 ]; 
   if (ma2>ma_2 && ma1<ma_1)
      TimeStart=Time[ 0 ];
   if (ma1>ma_1)
      cu1= true ;
   if (ma1<ma_1)
      cu2= true ;

   if (cu1== true || cu2== true )  
       int b1=iBarShift( Symbol (), PERIOD_H1 , TimeStart);      
       int b2=iBarShift( Symbol (), PERIOD_H1 , TimeCurrent ());

     for ( int j=b2;j<=b1;j++){
         f=b1-b2;
      }
       
   return ( 0 );
  }