핍당 가격 - 페이지 3

 

Hehe 또 다른 행복한 고객 :)- 우리가 그것에 있는 동안 LEHayes는 핍을 반올림하지 않고 백분율로 돈 관리를 계산하는 데 도움을 줄 생각입니다. 현재 계정 자산 의 1%를 베팅하고 싶을 때 사용하는 방법은 다음과 같습니다.

이중 이익_F=0.00001,랏=0.1;
랏=NormalizeDouble((AccountEquity()*Profit_F),1);
if (Lots < 0.1) Lot=0.1;
if (Lots > 1.0) Lot=1.0;

이것은 예를 들어 10,000달러가 있을 때 100의 손절매에 대해 잘 작동합니다. $10,000 X 0.00001 = 0.1 로트. 그러나 $15,000이 있을 때 로트 크기는 이제 0.15와 같지만 브로커가 매크로 로트를 허용하지 않기 때문에 2.0으로 반올림됩니다. 자기 자본이 $20,000에 도달할 때까지 0.1을 유지하도록 하려면 어떻게 해야 합니까? 나는 오랫동안 당신의 스레드를 읽은 후 검색하고 공부하기에 너무 지쳤습니다. mm 계산을 위한 다른 방정식이 있는 경우 대신 제공하십시오.

 
LEHayes :

이것은 저를 미치게 만듭니다. 저는 현재 쌍에 관계없이 Pip당 가격을 계산하는 것 외에는 아무것도 하지 않는 기존 알고리즘을 몇 달 동안 찾고 있었습니다. 거래 규모와 자금 위험 관리를 미리 계산하는 방법으로 이 값에 의존하는 정말 좋은 자금 관리 전략 2개를 찾았지만 Pip당 가격을 처리하는 계산의 단일 예는 찾을 수 없습니다.

기능의 대가로 내 자금 관리 시스템을 제공할 용의가 있습니다. 함께 일했던 멘토들이 제안한 두 가지 기술을 모두 알려 드리겠습니다.


먼저 다섯 가지 기본 기호 유형이 있음을 인식해야 합니다. 이것은 tick_value, 레버리지 등을 계산하는 것과 같은 문제에 있어서 중요합니다.

기호 유형에 대한 공식적인 정의는 없지만 USD 표시 계정의 경우 다음과 같이 기호 유형을 열거합니다.
            SymbolType 1 :  Symbol() = USDJPY
                           
                           Base = USD
                           Counter = JPY
            
            SymbolType 2 :  Symbol() = EURUSD
                           
                           Base = EUR
                           Counter = USD

            SymbolType 3 :  Symbol() = CHFJPY
                           
                           Base = CHF
                           Counter = JPY
                           
                           USD is base to the base currency pair - USDCHF
                           
                           USD is base to the counter currency pair - USDJPY
            
            SymbolType 4 :  Symbol() = AUDCAD
                           
                           Base = AUD
                           Counter = CAD
                           
                           USD is counter to the base currency pair - AUDUSD
                           
                           USD is base to the counter currency pair - USDCAD
            
            SymbolType 5 :  Symbol() = EURGBP
                           
                           Base = EUR
                           Counter = GBP
                           
                           USD is counter to the base currency pair - EURUSD
                           
                           USD is counter to the counter currency pair - GBPUSD

관련성은 해당 계정의 표시가 해당 금융 상품의 기준 통화 및 상대 통화와 어떻게 관련되는지입니다. CFD 및 통화 쌍 에 대해서도 동일합니다.

기호 유형이 있으면 금융 상품당 레버리지를 계산할 수 있습니다. 예를 들어 다음은 AUDCAD에 대한 레버리지를 계산하는 데 필요한 코드입니다.

CalculatedLeverage= NormalizeDouble (MarketInfo( Symbol (),MODE_LOTSIZE)*(MarketInfo(CalculatedBasePairForCross,MODE_BID)+MarketInfo(CalculatedBasePairForCross,MODE_ASK))/( 2 *MarketInfo( Symbol (),MODE_MARGINREQUIRED)), 2 )
이 예에서 내가 코딩한 호출 함수는 이미 AUDCAD의 경우 CalculatedBasePairForCross가 AUDUSD라고 결정했을 것입니다.
CalculatedBasePairForCross= StringConcatenate (SymbolBase,AccountCurrency(),postfix);
그리고 SymbolBase(금융 상품 Symbol()의 기본 통화)는 다음과 같습니다.
SymbolBase= StringSubstr ( Symbol (), 0 , 3 );
등등.

틱 값을 계산하려면 관심 금융 상품인 Symbol()과 계정의 금액으로 연결되는 연결 통화 쌍 모두의 평가가 변경될 때 중요하므로 기호 유형을 고려해야 합니다. 위의 예에서 4의 기호 유형 - 계정이 USD로 표시된 경우 AUDCAD - Tick 값은 다음과 같이 명시적으로 정의됩니다.

CalculatedTickValue=MarketInfo( Symbol (),MODE_POINT)*MarketInfo( Symbol (),MODE_LOTSIZE)/MarketInfo(CalculatedCounterPairForCross,MODE_BID)
AUDCAD에 대한 CalculatedCounterPairForCross 변수가 이전에 USDCAD로 결정된 경우:
CalculatedCounterPairForCross= StringConcatenate (AccountCurrency(),SymbolCounter,postfix);
그리고 SymbolCounter는 다음에 의해 결정되었습니다.
SymbolCounter= StringSubstr ( Symbol (), 3 , 3 );

이러한 방식으로 이러한 값의 계산을 명시적으로 프로그래밍하면 브로커에 구애받지 않는 시장 정보를 결정할 수 있습니다.

여기 코드는 Symbol()의 기본 통화와 짝을 이룰 때 계정의 명칭 통화가 상대 통화이고 마찬가지로 계정의 명칭 통화가 상대 통화와 짝을 이룰 때 기본 통화인 symboltype = 4에만 유용합니다. Symbol() 쌍을 형성합니다.

(AUDCAD -> AUDUSD 및 USDCAD)

5가지 범용 기호 유형이 있지만 레버리지, 마진 및 틱값을 계산하기 위해 이 중 4개만 분류하면 됩니다. 그리고 수학은 계정의 액면가와 관련된 교차 통화 쌍을 다룰 때만 특정한 문제가 됩니다.

내 자금 관리 접근 방식은 모든 거래에 대해 손실 위험이 있는 가치를 명시적으로 정의하고 거래를 종료해야 하는 가격 가치를 정확히 알아야 손실은 이전에 정의된 손실 예산을 따릅니다. 교차 쌍의 경우 위험에 처한 가치는 주어진 순간에 두 통화 쌍의 가격을 기반으로 한다는 것이 자연스럽게 밝혀졌습니다(둘 중 하나에 대해 헤지하지 않는 한).

이 정보가 전혀 도움이 되나요?

 
cloudbreaker :

TICKVALUE는 단독으로 사용하면 신뢰할 수 없습니다.

이것이 어떤 브로커에 적용되는지 또는 시장 개장/종료와 같은 다른 고려 사항이 있는지 아는 것은 흥미로울 것입니다. 나는 당신의 이러한 발견을 복제할 수 없었습니다.

 
ㅋ. 나는 jjc를 깨닫는다. 그러나 비율을 사용하는 것은 나쁘지 않습니다. 가장 자주 우리는 1로 나눌 것입니다. 미안하기보다는 안전한가요? CB
 
1005phillip :

이 정보가 전혀 도움이 되나요?

나는 심볼 유형 3-5 사이의 구별을 알아차린 적이 없습니다. 어쨌든, 생각을위한 좋은 음식 ... 훌륭한 요약에 감사드립니다!
 

와우 저는 핍의 가치를 계산하는 데 그렇게 많은 것이 있다는 것을 결코 깨닫지 못했습니다. 제 EA에서는 ea가 구매인 경우 첫 번째 공개 주문을 사용하여 계산하도록 하여 수행했습니다. 현재 입찰 가격 - 주문 공개 가격/주문 이익 = 현재 기본 통화 의 pip 값 또는 판매인 경우 currentask+openprice/orderprofit=pip 값이 올바르게 작동하지 않습니까?

편집: 나는 거꾸로 내가 orderprofit/(currentbid-openprice)=pip 값을 의미한다고 썼다는 것을 깨달았습니다.

 
SDC :

와우 저는 핍의 가치를 계산하는 데 그렇게 많은 것이 있다는 것을 결코 깨닫지 못했습니다. 제 EA에서는 ea가 구매인 경우 첫 번째 공개 주문을 사용하여 계산하도록 하여 수행했습니다. 현재 입찰 가격 - 주문 공개 가격/주문 이익 = 현재 기본 통화의 pip 값 또는 판매인 경우 currentask+openprice/orderprofit=pip 값이 올바르게 작동하지 않습니까?


이 계산은 현재 매수 또는 매도호가에 관계없이 모든 핍이 동일한 가치를 갖는다는 한계 내에서 유효합니다.

이것은 내가 위에서 정의한 기호 유형 = 2인 통화 쌍 , 즉 EURUSD 등(계정의 명칭이 쌍의 상대 통화인 모든 통화 쌍)에 대해 엄격하게 적용됩니다.

대부분의 사람들에게 차이점은 중요하지 않을 가능성이 높으며 결과적으로 발생하는 오류는 작습니다. 제 경우에는 정확한 분석 표현으로 값을 강력하게 계산하고 싶었습니다.

예를 들어, 예정된 거래에서 가능한 최대 손실에 대해 $200의 예산을 책정하고 중지가 200포인트로 설정된 경우 손실이 $200를 초과할 수 없도록 주문에 대한 로트 크기를 알고 싶습니다. 손절매 가격 시점에서 핍 평가를 올바르게 계산해야 합니다. 날개를 달아주는 것은 나와 내 고객에게 허용되는 선택이 아니었습니다. ;)
 

LEHayes가 모든 것을 해결해줘서 기쁩니다. 그리고 Phillip, TickValue 및 레이아웃 쌍을 완전히 제거하여 모두가 혜택을 받을 수 있도록 잘 합성했습니다. 굉장해!

나는 추가하고 싶습니다 : 합성 작업 ...

CalculatedCounterPairForCross= StringConcatenate (AccountCurrency(),SymbolCounter,postfix);

SymbolCounter= StringSubstr ( Symbol (), 3 , 3 );

... 일부 미니 로트 브로커에서 USDJPYm과 같은 추가 추가 기간을 조심해야 합니다. 견고성을 찾고 있다면 브로커가 .set 파일 또는 .set 파일에서 읽는 IMO를 기본 및 카운터 사이에 넣거나 추가하여 기호의 처음 6자를 변경할 수 있는지 여부를 알 수 없습니다. sel 파일이 더 안전한 방법입니다.

 
cameofx :

LEHayes가 모든 것을 해결해줘서 기쁩니다. 그리고 Phillip, TickValue 및 레이아웃 쌍을 완전히 제거하여 모두가 혜택을 받을 수 있도록 잘 합성했습니다. 굉장해!

나는 추가하고 싶습니다 : 합성 작업 ...

CalculatedCounterPairForCross= StringConcatenate (AccountCurrency(),SymbolCounter,postfix);

SymbolCounter= StringSubstr ( Symbol (), 3 , 3 );

... 일부 미니 로트 브로커에서 USDJPYm과 같은 추가 추가 기간을 조심해야 합니다. 견고성을 찾고 있다면 브로커가 .set 파일 또는 .set 파일에서 읽는 IMO를 기본 및 카운터 사이에 넣거나 추가하여 기호의 처음 6자를 변경할 수 있는지 여부를 알 수 없습니다. sel 파일이 더 안전한 방법입니다.


좋은 지적! 그러나 나는 강력한 계산에 대해 말할 때 그런 종류의 견고성을 찾고 있지 않습니다.

중개인은 원하는 대로 통화 쌍 의 이름을 지정할 수 있습니다. 통화 기호 lovelyUSDmoonCADcheese를 사용하여 새 중개인과 실시간 거래를 시도하기 전에 그러한 사실을 인지하고 그에 따라 내 코드를 수정할 수 있기를 바랍니다. :피

이 코드는 내가 지금까지 본 사례(Alpari, CitiFX, CMS forex, forex.com, FXCM, FXDD, IBFX, MIG 및 ODL)의 100%를 단순히 처리합니다. 미래의 증거, 단지 현재의 증거. 이제 미래에 대비할 수 있도록 염두에 둔 것이 있다면...지금이 당신의 생각을 말할 좋은 시간입니다 :)

 

lovelyUSDmoonCADcheese! ...

ㅋㅋㅋ! 나는 브로커가 symbol의 속성에서 Symbol 설명 을 잘못 입력한 것을 보았습니다(Symbol() 매개변수가 아니라 어느 시점에서 이것도 입력해야 합니다!). 누가 알아! :))

100% 완전할 수 있는지 여부는 알 수 없습니다(무엇입니까?). 그러나 나는 다음과 같이 생각하고 있습니다.

  • 가능한 3자 대문자 베이스/카운터 이름의 목록/인벤토리를 만듭니다.
  • .set 또는 .sel에서 쌍 문자열을 읽습니다.
  • 한 번에 한 글자씩 이동하여 가능한 일치 항목을 검색합니다. 가능한 대/소문자 조합(ASCII 값은 x 정수로 다를 수 있으므로 확인해야 함)을 허용하는 것을 무시 하고 루프를 사용하여 예를 들어 모든 문자를 대문자로 바꿀 수 있습니다.
  • 일치하는 항목이 있으면 '인벤토리' 이름이 아닌 '브로커'/'별칭' 이름으로 저장합니다. 쌍의 두 번째 부분을 계속 찾고 동일하게 수행하십시오.
  • 기본/카운터 이름이 Symbol()을 통해 일관성이 있는지 확인해야 합니다. 그리고 '별칭'도 저장하십시오.
  • 별칭을 사용하여 쌍을 합성합니다.
  • 새로운 베이스/카운터 이름이 변경되거나 추가된 경우. 별칭에 추가합니다.

Gordon은 얼마 전에 EA에서 자동 완전 검사가 어떤 장점을 가지고 있는지에 대한 자신의 견해를 제게 제안했습니다. 이것을 염두에 두고(그리고 존중하면서) 나는 이것이 지옥을 위해서라도 가치 있는 무언가가 될 수 있다고 여전히 생각합니다! :)

사유: