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

 
알겠습니다. 알려주지 않으면 저녁에 알아낼 수 있도록 도와주세요.
 
추가 계산을 위해 대체 int 값으로 계산 결과로 얻은 double 값을 사용할 수 있는지 알려주십시오.
예시:
   ATR_Din= iATR ( NULL , PERIOD_M5 , 14 , 1 );
   Din_Per210 = MathRound ( 6000 *ATR_Din+ 210 );
   Din_Per5   = MathRound ( 6000 *ATR_Din+ 5 );
   
   MA210_DIN  = iMA ( NULL , PERIOD_M5 , Din_Per210 , 0 , MODE_SMA , PRICE_CLOSE , 1 );
   MA5_DIN    = iMA ( NULL , PERIOD_H1 , Din_Per5 , 0 , MODE_SMA , PRICE_CLOSE , 1 );
   
여기서 내가 강조한 변수는 double 유형이지만 iMAint 값이 필요한 곳에 값을 사용합니다(MAC의 기간으로).
따라서 문제는 이 사용법이 정확합니까 아니면 값을 int 유형으로 변환해야 하는 것입니까?
 
안녕하세요 여러분, 각 최적화 결과 에 대해 전문가 테스트를 실행하는 스크립트가 있는지 알고 있다면 알려주십시오. 각 테스트 결과를 별도의 파일(htm 보고서)에 저장합니다.
 
Craft :
괜찮습니다. 작업 예제나 링크를 얻을 수 있습니까?
코드를 제공하거나 작업을 설정하면 수정하겠습니다.
 
artmedia70 :
추가 계산을 위해 대체 int 값으로 계산 결과로 얻은 double 값을 사용할 수 있는지 알려주십시오.
예시:
여기서 내가 강조한 변수는 double 유형이지만 iMAint 값이 필요한 곳에 값을 사용합니다(MAC의 기간으로).
따라서 문제는 이 사용법이 정확합니까 아니면 값을 int 유형으로 변환해야 하는 것입니까?
변환은 자동으로 이루어지며, 소수 부분은 단순히 잘립니다. 이 사용법에 대해 내가 만난 유일한 제한 사항 은 배열 인덱스 에 double을 배치할 수 없다는 것입니다.
 
alsu :
변환은 자동으로 이루어지며, 소수 부분은 단순히 잘립니다. 이 사용법에 대해 내가 만난 유일한 제한 사항은 배열 인덱스에 double을 배치할 수 없다는 것입니다.
덕분에 든든합니다... :)
질문 하나 더:
   MA200_DIN = iMA ( NULL , PERIOD_M5 ,Din_Per200, 0 , MODE_SMA , PRICE_CLOSE , 1 );
   MA200_UP  =MA200_DIN+ 20 *pt;
   MA200_DN  =MA200_DIN- 20 *pt;
   
   MA5_DIN  = iMA ( NULL , PERIOD_H1 ,Din_Per5, 0 , MODE_SMA , PRICE_CLOSE , 1 );
   MA5_UP   =MA5_DIN+ 20 *pt;
   MA5_DN   =MA5_DIN- 20 *pt;
건설
MA200_UP=MA200_DIN+ 20 *pt; 
MA200_DN=MA200_DIN- 20 *pt; и 
MA5_UP=MA5_DIN+ 20 *pt; 
MA5_DN=MA5_DIN- 20 *pt;
작동하지 않습니다. 차트에 값을 표시할 때 모두 동일한 값을 갖습니다. 예를 들면 다음과 같습니다.
MA200_DIN, MA200_UP, MA200_DN 및
MA5_DIN, MA5_UP, MA5_DN용 1.4106.
+20 및 -20 포인트 수준을 계산하는 공식이 작동하지 않는 것으로 나타났습니다.
내가 무엇을 잘못하고 있지?
 
pt는 무엇과 같습니까? NormalizeDouble() 로 인쇄해 보세요.
 
그게 다야, 고마워, 알아냈어... I set pt= Point ; 계산 ...
Matroskin이 말했듯이 : Sharik, 당신은 멍청이입니다 ... :)
 
alsu :
코드를 제공하거나 작업을 설정하면 수정하겠습니다.

WellsLab에서 유사 작업은 다음과 같습니다.

MyATR = SMA.Series(((고-저)/저), PerB)[i-1] ;

if (BuyAtStop(i, (Open[i] + Open[i]*MyATR), "") ;

즉, 바가 열릴 때 지정된 수준에 도달하면 매수/매도 포지션이 한 번 열리는 스톱이 설정되며, 여기서 현재 바의 Open[i] 가격 + 트리거(동일한 오픈 가격에 닫힌 막대의 PerB 기간에 대해 계산된 MyATR [i-1])

예를 들어, ValLab에서 mql4에서 얻고자 하는 것을 보여줍니다.

사이트의 자료를 연구 한 후 아날로그를 만들려고 시도했는데 다음과 같은 일이 발생했습니다.

        MyATR = ((High[0] - Low[0])/Low[0]);
	BT = Open[ 0 ] + Open[ 0 ]*iMAOnArray(MyATR , 0 ,PerB, 0 ,MODE_SMA, 1 );
        ST = Open[ 0 ] - Open[ 0 ]*iMAOnArray((MyATR , 0 ,PerS, 0 ,MODE_SMA, 1 );

   if (Ask >= BT)                       // Если разница между
     {                                           // 
      Opn_B= true ;                               // Критерий откр. Buy
      Cls_S= true ;                               // Критерий закр. Sell
     }
   if (Bid <= ST)                       // Если разница между
     {                                           // 
      Opn_S= true ;                               // Критерий откр. Sell
      Cls_B= true ;                               // Критерий закр. Buy
     }

결론: 주문이 쏟아지고 있습니다. 주어진 수준에서 주문이 한 번 실행되도록 어떤 조건을 추가해야 하는지(또는 기존 조건을 변경해야 하는지) 알려주세요.

 

참고: iMAOnArray 함수에서 첫 번째 매개변수로 배열을 대체해야 하며 MyATR 스칼라가 있습니다. 제대로 작동하려면 다음을 수행해야 합니다.

1. 더블 MyATR[] 선언;

2. 크기를 ArrayResize(MyATR,PerB)로 설정합니다.

3. 배열을 채우십시오(i=1;i<=PerB;i++) MyATR[i-1]=(High[i]-Low[i])/Low[i]; 인덱스 i는 닫힌 막대만 필요 하므로 1부터 시작합니다.

4. 그 후에 iMAOnArray(MyATR,0,PerB,0,MODE_SMA,0)를 읽을 수 있습니다. 그리고 여기에서 마지막 매개변수는 0과 같습니다. 왜냐하면 shift ha 1은 이미 단락 3에서 고려되었기 때문입니다.


그것이 어떻게 나타나는지 확인하십시오. 아마도 오류는 이것에만있을 것입니다.