[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 705

 
Infinity :

너무 명확합니다. 책을 보았지만 보이지 않습니다. 작동합니다. 감사합니다! 질문을 진행하겠습니다. 동일한 전역 변수에 관한 모든 것. 그래서 지표에 다음 조건을 추가했습니다.

표시기가 켜져 있는 통화에 따라 값을 할당할 전역 변수를 결정하고 싶습니다.

내가 이해하는 것처럼 전역 변수 GlobalVariableSet (valuta, param)에서 이름(valuta)에는 위에서 할당된 값이 포함되어야 합니다.

EA 코드에서 전역 변수를 다시 호출합니다.

문자열발루타 = "발루타";

int i=GlobalVariableGet(값); // 하지만 값을 얻지 못합니다.... 즉, 0을 얻습니다. 전역 변수의 이름을 이런 식으로 변경하는 것은 불가능할까요?

명확하지 않습니다. EA가 표시기에 의해 저장된 값을 확인하는 경우 EA의 valuta 매개변수 값이 기기 이름과 일치해야 한다고 가정하는 것이 논리적입니다. EURUSD 또는 GBPUSD..

따라서 EA가 현재 상품의 값을 확인하는 경우

문자열 값 = Symbol();

int i= GlobalVariableGet (값);
 
zhuki :

도움말에서 시작하려면

이중 글로벌변수 가져오기 ( 문자열 이름)

기존 전역 변수의 값을 반환하거나 오류가 발생하면 0을 반환합니다. 오류에 대한 정보를 얻으려면 GetLastError() 함수를 호출해야 합니다.


GV 콘텐츠를 볼 수 있지만 얻을 수 없습니까?


글쎄, 이름과 값이 모두 전역 변수에 표시됩니다. .... 전역 변수의 (parameter-name)을 통해 내 코드에서 전역 변수의 값을 가져올 수 없습니다. 문자열 이름이면 문제가 없습니다.
 
Infinity :

글쎄, 이름과 값이 모두 전역 변수에 표시됩니다. .... 전역 변수의 (parameter-name)을 통해 내 코드에서 전역 변수의 값을 가져올 수 없습니다. 문자열 이름이면 문제가 없습니다.


바꾸다

if (symb==EUR) {값=EUR;}

if (symb=="EURUSD") {valuta="EUR";}

 
keekkenen :

명확하지 않습니다. EA가 표시기에 의해 저장된 값을 확인하는 경우 EA의 valuta 매개변수 값이 기기 이름과 일치해야 한다고 가정하는 것이 논리적입니다. EURUSD 또는 GBPUSD..

따라서 EA가 현재 상품의 값을 확인하는 경우

문자열 값 = Symbol();

int i=GlobalVariableGet(값);


예, 작동합니다)) 모든 것이 보이는 것보다 간단합니다)

여기에 와서 도움을 주신 모든 분들께 진심으로 감사드립니다!

 

친구, 내가 망친 곳을 알려주세요 ... 이해할 수 없습니다. 표시기에서 데이터를 읽지만 작동하지 않습니다. 찾을 수 없습니다. 누군가 내가 이해하지 못하는 것을 말해 줄 수 있습니까?

 //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
// Поиск экстремумов
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
void    SaveDataIND( double &TempIND[], int nBars)
{
   ArrayResize (TempIND,nBars);                     // Размер массива под переданный в ф-цию размер
   for ( int j= 0 ; j<=nBars- 1 ; j++)
      {
         TempIND[j]= iAD ( NULL , PERIOD_M5 ,j);         // Запишем данные инд. в цикле в массив
         Print ( "TempIND[" ,j, "] = " ,TempIND[j]);
      }
//------------------------------------------------------------------
// Заполнение массивов данными о пичках и донышках
//------------------------------------------------------------------
   double    PeakUP[], PeakDN[];                     // Объявляем массивы пичков/донышков
   int i, k, l, asize;
   if (TempIND[nBars- 1 ]<TempIND[ 1 ])                 // Если последний бар массива ниже первого - тенденция вверх
      {
         k= 0 ;                                       // Инициализируем индекс массива донышков
         for (i= 3 ; i<=nBars- 1 ; i++)                 // Пробежимся по массиву значений
            {
               if (TempIND[i]>TempIND[i- 1 ] && 
                   TempIND[i- 1 ]<TempIND[i- 2 ])       // Нашли донышко
                  {
                     PeakDN[k]=TempIND[i- 1 ];       // Заносим его значение в массив донышек 
                     k++;                           // Увеличиваем индекс массива донышков
                  }
            }
         asize= ArraySize (PeakDN);
         for (l= 0 ; l<=asize; l++)
            {
               Print ( "PeakDN[" ,l, "] = " ,PeakDN[l]);
            }
      }
   if (TempIND[nBars- 1 ]>TempIND[ 1 ])                 // Если последний бар массива выше первого - тенденция вниз
      {
         k= 0 ;                                       // Инициализируем индекс массива пичков
         for (i= 3 ; i<=nBars- 1 ; i++)                 // Пробежимся по массиву значений
            {
               if (TempIND[i]<TempIND[i- 1 ] && 
                   TempIND[i- 1 ]>TempIND[i- 2 ])       // Нашли пичёк
                  {
                     PeakUP[k]=TempIND[i- 1 ];       // Заносим его значение в массив пичков 
                     k++;                           // Увеличиваем индекс массива пичков
                  }
            }
         asize= ArraySize (PeakUP);
         for (l= 0 ; l<=asize; l++)
            {
               Print ( "PeakUP[" ,l, "] = " ,PeakUP[l]);
            }
      }            
         

}   

로그에는 항상 표시 값 배열의 데이터가 표시되지만 - 중지 ...
... 단 하나의 제로 셀... 그리고 단 하나의... 도와주세요...


 
odiseif :
오타가 나와서 죄송합니다..... 원본입니다

Odysseus, 거기에 없으면 추가해야합니다 :))

파일:
 
artmedia70 :

친구, 내가 망친 곳을 알려주세요 ... 이해할 수 없습니다. 표시기에서 데이터를 읽지만 작동하지 않습니다. 찾을 수 없습니다. 누군가 내가 이해하지 못하는 것을 말해 줄 수 있습니까?

로그에는 항상 표시 값 배열의 데이터가 표시되지만 - 중지 ...
... 단 하나의 제로 셀... 그리고 단 하나의... 도와주세요...

Artyom, 지금까지 첫 번째 오류를 발견했습니다.

PeakUP[] 및 PeakDN[] 배열은 주어진 수의 요소 없이 선언됩니다. 즉, 셀 없이 생성한 다음 코드에서 무언가를 작성하려고 하지만 요소를 포함하지 않기 때문에 당연히 아무 것도 기록되지 않으며 인쇄는 항상 0입니다. 얼마나 많은 봉우리와 계곡이 있는지 정확히 알지 못하기 때문에 이 작업을 수행하는 것이 좋습니다. 새 데이터가 도착하면 이러한 배열의 요소 수를 동적으로 늘리고 수정된 영역은 빨간색으로 강조 표시됩니다.

 if (TempIND[nBars- 1 ]<TempIND[ 1 ])                // Если последний бар массива ниже первого - тенденция вверх
      {
         k= 0 ;                                      // Инициализируем индекс массива донышков
         for (i= 3 ; i<=nBars- 1 ; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]>TempIND[i- 1 ] && 
                   TempIND[i- 1 ]<TempIND[i- 2 ])      // Нашли донышко
                  {
                     ArrayResize (PeakDN, k + 1 );
                     PeakDN[k]=TempIND[i- 1 ];       // Заносим его значение в массив донышек 
                     k++;                          // Увеличиваем индекс массива донышков
                  }
            }
         asize= ArraySize (PeakDN);
         for (l= 0 ; l< asize; l++)
            {
               Print ( "PeakDN[" ,l, "] = " ,PeakDN[l]);
            }
      }
   if (TempIND[nBars- 1 ]>TempIND[ 1 ])                // Если последний бар массива выше первого - тенденция вниз
      {
         k= 0 ;                                      // Инициализируем индекс массива пичков
         for (i= 3 ; i<=nBars- 1 ; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]<TempIND[i- 1 ] && 
                   TempIND[i- 1 ]>TempIND[i- 2 ])      // Нашли пичёк
                  {
                     ArrayResize (PeakUP, k + 1 );
                     PeakUP[k]=TempIND[i- 1 ];       // Заносим его значение в массив пичков 
                     k++;                          // Увеличиваем индекс массива пичков
                  }
            }
         asize= ArraySize (PeakUP);
         for (l= 0 ; l< asize; l++)
            {
               Print ( "PeakUP[" ,l, "] = " ,PeakUP[l]);
            }
      }    

ArraySize() 함수는 총 배열 요소 수를 반환하지만 인덱싱은 0부터 시작하므로 실제 요소 수는 ArraySize() - 1입니다.

 
그리고 다시 질문과 함께, 저는 여기에 있습니다) 이제 질문은 다음과 같은 성격을 띠고 있습니다. (이전에 도움을 주신 모든 분들께 감사드립니다) 이제 Expert Advisor는 지표의 전역 변수에서 데이터를 수신하여 데이터가 수신된 기호를 결정합니다. 이 데이터를 기반으로 Expert Advisor에서 지정합니다. - 글로벌 변수 의 데이터를 받은 통화에 대한 주문을 엽니다. 하나의 차트에는 Expert Advisor를, 다른 모든 차트에는 표시기를 첨부합니다. 데이터를 수신하지만 해당 통화(전문가 자체)에 대해서만 주문을 엽니다. ... 내가 이해하는 한 이것은 다음과 같아야 합니다. 다중 전문가, ... 수행 방법, 또는 적어도 다른 쌍에 대한 주문을 열려면 표시되어야 합니다. 여러 Expert Advisors를 실행하고 싶지 않습니다((
 
Infinity :
...다른 쌍에 대한 주문을 열기 위해 수행하는 방법 또는 최소한 무엇을 표시해야 하는지. 여러 Expert Advisors를 실행하고 싶지 않습니다((
OrderSend (통화쌍의 상징적인 이름....글쎄, 그리고 다른 매개변수......)
 
ToLik_SRGV :

Artyom, 지금까지 첫 번째 오류를 발견했습니다.

PeakUP[] 및 PeakDN[] 배열은 주어진 수의 요소 없이 선언됩니다. 즉, 셀 없이 생성한 다음 코드에서 무언가를 작성하려고 하지만 요소를 포함하지 않기 때문에 당연히 아무 것도 기록되지 않으며 인쇄는 항상 0입니다. 얼마나 많은 봉우리와 계곡이 있는지 정확히 알지 못하기 때문에 이 작업을 수행하는 것이 좋습니다. 새 데이터가 도착하면 이러한 배열의 요소 수를 동적으로 늘리고 수정된 영역은 빨간색으로 강조 표시됩니다.

ArraySize() 함수는 총 배열 요소 수를 반환하지만 인덱싱은 0부터 시작하므로 실제 요소 수는 ArraySize() - 1입니다.

아나톨리! 조국에 기념비를 세워야합니다! 가장 흥미로운 점은 내가 TempIND 배열을 위해 그것을 했다는 것입니다. 그러나 나는 그것들을 요술하는 것을 잊어버리고 반나절을 보냈다... :))