전략이 필요한 사람은 누구입니까? 많은 무료 - 페이지 59

 
Stellarator >> :

그러나 원래 값과 "차후 배포"에 불일치가 있었습니까? 여전히 두 배...)

아직 .... 모든 문제는 부정확성에서 비롯됩니다. :)

강제로 설득! 핵심 뉘앙스는 "Expert Advisor의 1회 반복의 한계"입니다. 따라서 이 한도 내에서 표시기는 한 번(첫 번째 호출 시) 계산됩니다! 100% 자신있게 선언합니다. 모든 추가 호출은 시작하지 않고 단순히 필요한 버퍼에서 필요한 값을 가져옵니다. 변경되지 않은 입력 매개변수가 있는 100% 조건(버퍼 및 오프셋 제외). 이 규칙은 하나의 기기 내 계산에 유효합니다. 하지만 iCustom이 다른 TF 및 도구로 전환하더라도 원칙은 유지된다고 생각합니다.

이미 즉시 "강제"..... 모두가 단념했을 것입니다. 문서화되지 않은 또 다른 기능에 감사드립니다 :)


 

FSB__Bar_Opening_Bar_Closing.mql4 v0.0.2 베타


Bar Opening 시 시장 진입

Bar Closing에서 나가기(닫기 또는 다음 열릴 때까지 10초)


** 이것은 진입/출구 지점 을 테스트하기 위한 데모일 뿐입니다. **


코드 조각:


 bool bIsFirstTick ; // It is used to catch the Bar Opening.
datetime dtCurrentBarOpeningTime ;

int init ( )
{
   bIsFirstTick = false ;
   dtCurrentBarOpeningTime = Time [ 0 ] ;
   return ( 0 ) ;
}

int start ( )
{
   // Is this the first tick for the bar
   bIsFirstTick = ( dtCurrentBarOpeningTime ! = Time [ 0 ] ) ;
   if ( bIsFirstTick )
   {
      dtCurrentBarOpeningTime = Time [ 0 ] ;
   }

. . .
. . .



///
/// Exit at a Bar Closing price (almost).
///
/// MetaTrader does not provide an onBarClose event so we are not able to close a position
/// exactly at Bar Closing. We workaround the problem by closing the position within a time span
/// near to the bar closing time. In the cases when there is no any ticks within this period,
/// we close the position att he next bar opening price.
///
int ClosePositionsAtBarClosing ( bool bCloseLong , bool bCloseShort , datetime dtClosingTimeSpan )
{
   int   iOrders = OrdersTotal ( ) ;
   bool bIsOpen = false ;

   for ( int iOrder = 0 ; iOrder < iOrders ; iOrder + + )
   {
       OrderSelect ( iOrder , SELECT_BY_POS , MODE_TRADES ) ;
      
       if ( ( OrderType ( ) = = OP_BUY | | OrderType ( ) = = OP_SELL ) & & OrderSymbol ( ) = = Symbol ( ) )
       {    // There is an open position for this symbol.

         datetime dtOpeningTime     = Time [ 0 ] - TimeSeconds ( Time [ 0 ] ) ; // The opening time of current bar
         datetime dtClosingTime     = dtOpeningTime + Period ( ) * 60 ;    // The closing time of current bars
         datetime dtCurrentTickTime = TimeCurrent ( ) ;                  // The time of current tick
         
         if ( dtCurrentTickTime > dtClosingTime - dtClosingTimeSpan | |   bIsFirstTick )
         {    // The current tick is within the closing time span or this is the first tick of the bar.

             // Code

         }
       }
     }
}
 

1. 성능에 관하여:

대부분의 경우 모든 틱 에 대해 지표를 다시 계산할 필요가 없습니다. (참고 - "이전 바 값 사용".) 지표는 "바 열림" 또는 "바 닫힘"에서 계산되어야 합니다.


2. 마이크론:

나는 거래 결정을 위해 가격을 비교할 때 fMicron = Point/2 를 사용합니다. 그러나 이것은 지표에 적용되지 않습니다. 예. USD/JPY 포인트 = 0.01; f마이크론 = 0.005.

0.000075는 수년간 많은 테스트를 거친 결과입니다. 저는 2001년에 FSB 작업을 시작했습니다. :) 물론 아무 의미가 없습니다. 나는 그것에 대해 여러 번 생각을 바꿨다.

**편집: MT는 이것을 사용자에게 제공합니다. 아마도 EA 전문가는 EA에서 사용하는 것을 말할 수 있습니다.

**edit2: 실험을 위해 이 매개변수를 구성 파일에 넣겠습니다.


3. 각 FSB 버전에 대한 다운로드를 위한 원본 표시기 소스 코드 제공을 시작하겠습니다. 그런 경우에 작은 변화가 있을 때마다 웹사이트를 업데이트할 필요가 없습니다.


float 을 double 로 변경하기 시작했습니다 . 오늘 저녁이나 내일 곧 이 버전을 게시하겠습니다. 그 후에 우리는 그것을 철저히 테스트해야 합니다. MQL로 작성하기 전에 몇 가지 문제/기능을 수정하기 위해 각 지표별로 전달해야 합니다.

 

1. 예, 대부분의 경우(열림/닫힘 위치에 대한 일반적인 FSB 접근 방식을 고려할 때(바 열림/바 닫힘 시)) - 이것은 필요하지 않습니다. 그러나 좋은 형식의 규칙은 의무적입니다. "처음부터"(바당 한 번이라도) 표시기 계산 - 일반적으로(동의함) 큰 기간 동안 중요한 오버헤드가 아닙니다... 그리고 기간이 분이라면? 하지만 지표가 여전히 각 막대를 계산해야 하는 경우(또는 원하는 경우) 어떻게 될까요? (주문으로 잡을 수 없는(또는 개시 가격이 스탑 레벨보다 낮기 때문에 더 이상 가능하지 않은) 위치의 정교한 포인트?)

변환은 훨씬 더 복잡하지 않습니다. 사실, 일부 코드는 "랩으로" 나타나며 막대를 통과하는 원리는 반대입니다. 사실, 대체로 - 모든 것. 가장 중요한 것은 알고리즘을 그대로 두고(소스 내부에서 쉽게 읽고 식별할 수 있도록) FSB와의 매개변수 호환성을 유지하는 것입니다. 신호 추출을 위한 편리한 메커니즘을 만듭니다. 그리고 표시기를 순수한 시각적 개체(EA에 관심이 없는 사람)에게 사용하기 쉽게 만드십시오. 제 생각에는 그렇습니다.


2. 글쎄, 나는 (동일한) 지표 값을 비교하기 위해 Point/2 변형을 사용하는 것을 제안하지 않았습니다 :) - 나는 단지 상수를 제안했습니다. 문제는 값과 차원입니다(0.000075 - 나쁘지 않습니다. 저는 그렇게 말하지 않았습니다. - 왜 여기에서는 "평소" 50이 아니라 75인지 이해가 가지 않습니다. :)?! "2001년 이후"의 경험은 매우 시사적이며(인수!) 저는 이 가치에 동의할 준비가 되어 있습니다. 그러나 마지막으로 - 0.12345 차원의 따옴표의 경우 이것은 충분하지 않습니다(어떤 의미에서 - 많이 :))). 숫자는 오른쪽으로 최소 1비트 이동해야 합니다(0.0000075). 예를 들어 내 DC에서 이러한 인용문은 이미 일반적인 관행입니다... 나는 여전히 도구에 조정하고 75가 아닌 "10"을 사용하는 것이 좋습니다. :):

f마이크론 = 포인트 * 0.1f

요컨대, 예 - 매개 변수로 설정하도록 제안합니다 (우호적인 실험 후에 모든 것이 제자리에 들어갈 것이라고 생각합니다 (비록 ... 관점이 여러 번 변경된 경우) ...). 그리고 더 많은 분들의 의견을 기다립니다...


3. 업로드한 소스를 다운받았습니다 :-P. 따라서 "비교할 대상"이 있습니다(결과 코드 측면에서). 글쎄, 당신이 더 이상 산만하고 싶지 않더라도 - float를 double로 변환하는 데 성공했습니다!


(RSI로 테스트하는 방법은 무엇입니까? ;) 손이 닿을 수 있다면?)

 

나는 최고가 100 > 마이크론 > 50이라는 것을 알았습니다. 그래서 75를 택했습니다. 그것은 내 중개인을 위한 것이었습니다: 포인트 = 0.0001.

그러나 중개인이 0.00001에서 견적을 시작했다는 것이 맞습니다.

해봅시다: 마이크론 = Math.Min(포인트 * 0.75, 0.000075)

지금부터 3시간동안 변환으로 마무리 했으면 좋겠습니다. 테스트를 위해 여기에 프로그램을 넣을 것입니다.

변환된 지표 소스 코드도 업로드하겠습니다.

 

모든 지표와 매개변수는 이중 숫자입니다.

미크론 = 0.000075


마지막 FSB v2.8.3.3 Beta와 함께 폴더에 exe를 넣습니다. 두 프로그램 모두 동일한 데이터와 전략을 공유합니다. 비교할 때 편리합니다. 지표 값에 주의하십시오. 거의 모든 지표와 다른 파일의 절반이 변경되었습니다.

전체 정밀도를 보려면 차트에서 F12 키를 누르거나 명령 콘솔(ind ###)을 사용하십시오.


모든 문제를 보고하십시오. 이제 지표에 대한 변경을 요청할 때입니다. MT 통합 작업을 계속하려면 먼저 수정해야 합니다.

 

좋은 아침!

Miroslav, 지금 매우 제한된 시간... 너무 빨리:

1. 신속한 송금 감사합니다(float to double)! 좋아요 !

2. 지금까지 모든 것이 작동하는 것 같습니다(확인한 만큼). 지표 값과 전략 결과 모두에서 차이점이 보입니다(이동 중에) :)

3. 그러나 - 차이점은 우리가 이전에 기대했던 것과는 다릅니다! (나는 어젯밤에 내부 실험을 수행했고 내 "두려움"이 확인되었습니다-변환은 계산의 정확도를 증가시킬 것입니다-그러나 그것은 결과를 치명적으로 바꾸지 않을 것입니다! 네 번째 또는 다섯 번째의 불일치 영역에서 무언가 숫자 ... 그러나 이미 두 번째에서 불일치가 있습니다(예: 모두 동일한 RSI).


그 이유는 다른 데 있습니다!!!


내가 확인한 것:

1. 처음에는 Digits 테마에 하드 바인딩이 있는지 생각했습니다(5개의 문자가 있는 도구가 있습니다. 상기시켜 드리겠습니다) ... 도구 속성 에서 4개의 문자를 강제하는 것은 도움이 되지 않았습니다 (그런데 - 공장!)

2. 지표 자체의 코드... 흠... 글쎄요, 불평할 것이 없습니다! 이제 double은 어디에나 있고, 코드 자체(내가 보기에는)는 변경되지 않았습니다... 코드는 매우 간단합니다(매우 자주 덧셈과 뺄셈만으로 작동함) - 그런 오류는 거기에 누적될 수 없습니다 !!! (자신감이 덜하지만... ;))

3. 마지막 생각(확인 못 하겠음) - 이게 뭐야 :)?! :



바 마감/개방 값 (???) (및 기타, 잠재적으로?)


이 숫자는 어디에서 왔습니까??? :))) (이 "postscripts"는 무엇입니까 :D?)

내가 이해하는 것처럼 여기 어딘가에서(Bar Closing.cs):

             // Saving the components
            component = new IndicatorComp [ 1 ] ;

            component [ 0 ] = new IndicatorComp ( ) ;
            component [ 0 ] . CompName   = "Closing price of the bar" ;
            component [ 0 ] . DataType   = ( parameters . SlotType = = SlotTypes . Open ) ? IndComponentType . OpenPrice : IndComponentType . ClosePrice ;
            component [ 0 ] . ChartType = IndChartType . NoChart ;
            component [ 0 ] . FirstBar   = 2 ;
             component [ 0 ] . Value     = Data . Close ;

결과적으로 내 첫 번째 작업 가정은 (어쩌면) 이것이 사실입니까? ("잘못된"(또는 "정확한", 하지만 정확히 이와 같은 이유는 무엇입니까?) 함수에서 따옴표 값 반환?)

부분적으로, 분명히 동시에 원하는 기능에서 얻은 값(표시기를 계산할 때 작동 중인 버퍼를 채우기 위해)에 대한 질문 protected static float [ ] Price ( BasePrice price )


일반적으로 Miroslav - "공은 당신 편입니다" :). 지금까지 내가 전송한 귀하의 지표 코드는 MT 지표와 값 측면에서 완벽하게 호환된다는 것을 알 수 있습니다.



동일한 막대, 첫 번째 지표는 변환이고 두 번째 지표는 MT에 고유합니다.


생각, 제안??? (6시간 후에 갈게)

 

Частично, видимо, заодно к вопросу получаемых значений (для заполнения оперируемых буферов при расчете индикатора) из искомой функции protected static float [ ] Price ( BasePrice price )

모든 기본 클래스, 메서드 및 속성은 이제 모든 거래 기능 과 함께 이중 값을 반환합니다(저는 지난 6개월 전에 변경했습니다).

RSI의 공식에 차이가 있는 것 같습니다. 그것은 두 번째 기호에 있을 수 없습니다. "하지만 우리는 이미 두 번째 기호에 차이가 있습니다!". :) FSB에서 기존의 MT RSI 공식을 채택하려고 합니다.



**편집하다:

이미 수정:

기본 매개변수: RSI(종가, 14, 평활화) == MT RSI

             for ( int iBar = 1 ; iBar < Bars ; iBar + + )
             {
                 if ( adBasePrice [ iBar ] > adBasePrice [ iBar - 1 ] ) adPos [ iBar ] = adBasePrice [ iBar ] - adBasePrice [ iBar - 1 ] ;
                 if ( adBasePrice [ iBar ] < adBasePrice [ iBar - 1 ] ) adNeg [ iBar ] = adBasePrice [ iBar - 1 ] - adBasePrice [ iBar ] ;
             }

             double [ ] adPosMA = MovingAverage ( iPeriod , 0 , maMethod , adPos ) ;
             double [ ] adNegMA = MovingAverage ( iPeriod , 0 , maMethod , adNeg ) ;

             for ( int iBar = iFirstBar ; iBar < Bars ; iBar + + )
             {
                 if ( adNegMA [ iBar ] = = 0 )
                    adRSI [ iBar ] = 100 ;
                 else
                    adRSI [ iBar ] = 100 - ( 100 / ( 1 + adPosMA [ iBar ] / adNegMA [ iBar ] ) ) ;
             }


곧 다운로드할 프로그램입니다.


 

Miroslav - 예, 수식에는 차이가 없습니다. RSI 논의의 맨 처음에 이미 말했듯이, 당신은 EXTRA 평균화 주기를 사용합니다. :).

일반적으로 마지막 주어진 코드로 판단하면 모든 것이 제자리에 놓 였습니다(이제 RSI는 일반적으로 다른 평균 모드를 계산합니다) :)! 야후!


(이전에 저장한 표시기 코드에는 이미 이 변경 사항이 포함되어 있습니다. ;) - 이를 확인하려면 다음 매개변수를 사용하여 fsbRSI를 호출하는 것으로 충분합니다.

indLogic = 신경 안 써

maMethod = 2 (! MT 측면에서 중요한 MODE_SMMA)

basePrice = 0(MT 기준 PRICE_CLOSE)

iPeriod = 14

fLevel = 중요하지 않음

iPrvs = 중요하지 않음

기본 상대 강도 지수 (MT와 함께 제공)와 결과의 정확한 일치를 얻으십시오.

그러나 fsbRSI 및 iRSI는 FSB와 동일 하지 않습니다 .


따라서 주요 문제로 돌아가십시오 .


"모든 기본 클래스, 메서드 및 속성은 이제 모든 거래 기능과 함께 이중 값을 반환합니다(저는 지난 6개월 전에 변경했습니다)."


아주 잘! 이 논문이 어떤 영향을 미치는지 이해하지 못했습니다.

바의 시가와 바의 종가는 ? 위의 예에서.


나는 질문을 반복합니다: 왜 원하는 가격이 견적과 다른가요??? (나는 6,7,8, ... 숫자에 대해 이야기하고 있습니다)


더블 은 그것과 전혀 관련이 없습니다! 따옴표 안의 값은 정규화되어 변수 간 단순 복사의 경우 보존(서로 완전히 동일해야 함)해야 합니다.

지표를 계산할 때 이러한 값이 나타나기 시작하면( 보호된 정적 부동 소수점 [ ] Price ( BasePrice price ) 견적 값을 기반으로 계산을 위한 버퍼가 채워질 때) 목표에 가깝습니다(이상하게 보일 수 있음). 즉. 다른 소스처럼(이전 float 외에) "약간" 비정규화된 데이터 :)

 

일부 지표를 MT의 표준 지표처럼 보이도록 약간 변경했습니다.


변경된 FSB 표시기:

RSI

RSI의 발진기

RSI MA 오실레이터

볼린저 밴드

표준 편차

확률론


다음 지표에는 차이가 있습니다.

기세

시장 촉진 지수


다른:

MT 이동 평균 오실레이터 == FSB MACD 히스토그램

MT 모멘텀 == FSB 변화율

상대 활력 지수 - FSB에 포함되지 않음


이제 FSB와 MT 지표는 어느 정도 같아야 합니다.


할 것:

스토캐스틱 - 신호 수정

시장 촉진 지수 - 공식 개정;

FSB에 포함될 MT와 같은 모멘텀 - "모멘텀 MT"

FSB에 "상대 활력 지수" 포함.