오류, 버그, 질문 - 페이지 33

 
Urain :

고려할 가치가 있는 제안

물론 일반적인 논리의 관점에서 이것은 오른손으로 왼쪽 귀를 긁는 것과 같습니다 (하지만 이것은 더 이상 당신을위한 것이 아니라 개발자를위한 것입니다).

그렇다면 왜 네이티브가 아닌 악기의 데이터를 호출할 수 있습니까?

여전히 사용자 지정 표시기 를 만들고 올바른 도구에서 호출해야 하는 경우 일반적으로 결론은 모자를 사는 것입니다.

그러한 호출의 가능성은 필요하고 단순히 필요합니다. 단지 개발자가 칠면조를 작성할 때 그러한 접근 방식을 상상할 수 없었을 뿐입니다.

나는 사용자 정의 칠면조의 매개변수에 도구를 지정하는 것에 대해 이야기하고 있습니다(그들의 의견으로는 iCustom() 매개변수가 아니라).


추신

iCustom()으로 작업할 때 우선 순위는 분명히 처음에 기계 거래에 주어졌습니다. 실제로 EA에서 특정 포인트가 고려되고 특정 작업이 수행되고 그 후에만 iCustom()이 사용자 정의에 대해 호출될 것이라고 가정합니다. 칠면조.

그렇지 않으면 모든 작업과 책임은 칠면조 코드를 구현하는 프로그래머에게 있습니다(과도한 칠면조 속임수는 시스템 전체의 속도 저하 또는 충돌로 이어질 수 있으므로 치명적인 오류와 결과를 초래할 수 있음).

 
Urain :

고려할 가치가 있는 제안

다시, 글쎄, 나는 JPY 데이터로 EUR에 대한 기성 표시기를 부를 것이지만 (예를 들어, 엔화에 대한 기록이 충분하지 않음)

그러나 이 길이에 대한 데이터가 없으며 그가 나에게 무엇을 말할 것입니까 ??? 같은 노래.

"네이티브" 기기에 대한 오류 및 병목 현상을 처리하는 것이 훨씬 더 쉽고, 데이터를 요청하는 전문가 또는 칠면조를 호출하기 전후에 사전 제어 및 최종 확인을 수행합니다.

두 번째 방법이 있다고 생각하기 때문에 내 관점에서 그것은 근본적으로 잘못된 것입니다. 논리에 따르면 칠면조에서 하나 이상의 함수(계산기에서 호출)를 만들고 필요한 모든 것을 계산하고 결과를 계산기로 반환해야 합니다.

추신

하지만 여기에 문제가 있습니다. 임의의 기호에 있는 막대 수를 계산할 수 있습니다. 하지만 다른 것들은 어떻습니까?

 
Prival :

벌레. 설명. ATS는 항상 시장에 있습니다(이중 로트 0.2로 반전)

테스트 모드 모든 틱. 모든 것이 정상입니다.

시가로 테스트 모드. 같은 조각.

어떤 이유로 2개의 트랜잭션으로 분할됩니다. 그냥 그렇게 보일 수도 있지만 정확하지 않습니다. 그렇게해서는 안됩니다.

닫기 명령으로 열림 위치 에 대한 명령을 재정렬합니다. 이 순서로 있어야합니다

- 클로즈 포지션

- 위치 수정

- 오픈 포지션

그런 다음 같은 막대에서 닫고 열 수 있습니다.

 
gpwr :

닫기 명령으로 열림 위치에 대한 명령을 재정렬합니다. 이 순서로 있어야합니다

- 클로즈 포지션

- 위치 수정

- 오픈 포지션

그런 다음 같은 막대에서 닫고 열 수 있습니다.

닫기 명령이 없습니다. 개봉만. 시장에서 0.1의 매수가 있으면 0.2의 매도를 엽니다. 이 연산의 결과, 단말은 0.1 셀을 가져야 하며, 또한 2개가 아닌 1개의 연산에 있어야 한다.

나는 개발자들이 내가 말하는 것을 이해했다고 생각합니다.

 

이 코드를 작성했습니다

 #property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property indicator_label1   "I1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1   1
//--- plot Label2
#property indicator_label2   "I2"
#property indicator_type2   DRAW_LINE
#property indicator_color2  Green
#property indicator_style2  STYLE_SOLID
#property indicator_width2   1
//--- indicator buffers
double          I1Buffer[];
double          I2Buffer[];
int OnInit ()
  {
   SetIndexBuffer ( 0 ,I1Buffer, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,I2Buffer, INDICATOR_DATA );
   return ( 0 );
  }

int OnCalculate ( const int rates_total,       // размер массива price[]
                 const int prev_calculated,   // обработано баров на предыдущем вызове
                 const int begin,             // откуда начинаются значимые данные
                 const double & price[])       // массив для расчета
  {
   string Symbol_1= "EURUSD" ,Symbol_2= "GBPUSD" ;
   if (rates_total< 1 ) return ( 0 );
   double Arr1[],Arr2[];
   int end,rez0,rez1;
   end= MathMin (( int ) SeriesInfoInteger (Symbol_1, 0 , SERIES_BARS_COUNT )- 1 ,( int ) SeriesInfoInteger (Symbol_2, 0 , SERIES_BARS_COUNT )- 1 );
   end= MathMin (end,rates_total-prev_calculated+ 1 );
   rez0= CopyClose (Symbol_1, PERIOD_CURRENT , 0 ,end, Arr1);
   if (rez0==- 1 ){ Print ( "Ошибка копирования " ,Symbol_1, " " , GetLastError ()); return ( 0 );}
   rez1= CopyClose (Symbol_2, PERIOD_CURRENT , 0 ,end, Arr2);
   if (rez1==- 1 ){ Print ( "Ошибка копирования " ,Symbol_2, " " , GetLastError ()); return ( 0 );}
   if (rez1!=rez0){ Print ( "Ошибка Синхронизации" ); return ( 0 );}
  
   ArraySetAsSeries (Arr1,true);
   ArraySetAsSeries (Arr2,true);
     
   int li=rates_total- 1 ;  
   for ( int i= 0 ;i<end;i++)
     {      
      I1Buffer[li]=Arr1[i]+ 0.26 ;
      I2Buffer[li]=Arr2[i];
      li--;
     }
   return (rates_total);
  }

잘 작동하는 것 같지만 필요한 모든 것을 고려하는지 여부는 모르겠습니다.
맞다면 여기 당신의 선택이 있습니다.
정확하지 않으면 수정하십시오.

 

그리고 여기서 질문이 있습니다.

EA에서 지표를 호출할 때 값이 지표와 일치하지 않는 이유는 무엇입니까?

즉, 칠면조에서는 1.5123이고 고문은 1.5117을 받습니다.

여기에 고문의 코드가 있으며 첨부 파일에 중복되어 있습니다.

 static int Handle;
int bars;
void OnInit ()
  {
   Handle= iCustom ( NULL , 0 , "proverka" );
  }

void OnTick ()
  {
   if (bars== Bars ( _Symbol , _Period )) return ;
   bars= Bars ( _Symbol , _Period );
   double buf1[],buf2[];    
   if ( CopyBuffer (Handle, 0 , 0 , 2 ,buf1)< 0 || CopyBuffer (Handle, 1 , 0 , 2 ,buf2)< 0 ) Alert ( "Ошибка копирования значений индикаторных буферов " , GetLastError (), "!!" );
   Print ( "Время " + TimeToString ( TimeCurrent (),TIME_DATE|TIME_MINUTES), "   буф1-" ,buf1[ 0 ], "   буф2-" ,buf2[ 0 ]);
  }

그리고 그림

또한 도구가 실행되는 첫 번째 버퍼는 동일합니다.

파일:
prover.mq5  1 kb
proverka.mq5  2 kb
 
ddd06 :

그리고 여기서 질문이 있습니다.

EA에서 지표를 호출할 때 값이 지표와 일치하지 않는 이유는 무엇입니까?

즉, 칠면조에서는 1.5123이고 고문은 1.5117을 받습니다.

여기에 고문의 코드가 있으며 첨부 파일에 중복되어 있습니다.

그리고 지표의 이전 값을 봅니다. 나는 이것이 단지 1.5117이라고 생각합니다. 인덱스 1에서 현재(마지막) 값을 가져옵니다. 또는 배열 SetAsSeries(bufX,true)를 할당합니다.
 
stringo :
그리고 지표의 이전 값을 봅니다.
1.512380 - 현재 1.512310 - 이전
 
ddd06 :

이 코드를 작성했습니다

잘 작동하는 것 같지만 필요한 모든 것을 고려하는지 여부는 모르겠습니다.
맞다면 여기 당신의 선택이 있습니다.
정확하지 않으면 수정하십시오.

네, 맞습니다. 수정 버전에는 배열의 길이에 대한 검사도 있지만 평소와 같이 시리즈의 방향을 잃어 버렸습니다.

그리고 그림이 계속 그려지긴 했지만 배열의 길이가 차트의 길이보다 작기 때문에 그림이 끝에서 중간(또는 그 정도)으로 갔고,

여기서도 렌더링이 없다는 인상이 만들어졌습니다.

추신 일반적으로 나는 오랫동안 이곳에 혼란이있을 것이라고 생각합니다.

mql4.com의 방문자가 같은 문제를 겪었기 때문에 지금 여기에 업로드하고 있습니다.

 
Urain :

네 맞아요

놀라운. 제 생각에는 간단하고 간결한 코드로 판명되었으므로 기초로 사용할 수 있습니다.

고문의 비용으로 질문은 - 서비스 데스크에 편지를 써야 합니까?

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
사유: