SL과 Account Risk를 기반으로 한 자금관리 LOT 사이즈 공식이 필요합니다! - 페이지 2

 
maleas_k :

내가 질문을 올바르게 이해했다면 이것이 당신을 위해 일할 것입니다.


이중 무료 = AccountFreeMargin();

이중 잠재력 손실,

이중 sum_potencial_loss = 0

더블 핍, lot_size;

더블 퍼센트_데포 = 5;

potencial_loss = (OrderLots() * (OrderOpenPrice() - OrderStopLoss()))*100000;
sum_potencial_loss = long_sum_potencial_loss + long_potencial_loss;

lot_size = ((((무료-롱_sum_potencial_loss) * percent_depo)/100.0)/pips)/100000 ;



감사합니다. 하지만 이미 공식이 있습니다. USD가 아닌 EUR 계정이 있기 때문에 포인트 값만 수정하면 됩니다. 코드는 다음과 같습니다.

 extern double MYSTOPLOSS = 50;  // CUSTOM SL SIZE IN PIPS AFTER THE STOPLEVEL
extern double RISK =2; // 2% ACCOUNT RISK

double LOT =( AccountEquity ()*RISK)/( 100 *( MarketInfo ( Symbol (), MODE_STOPLEVEL )+MYSTOPLOSS)* Point * 100000 );

그리고 Point를 TICKVALUE* TICKSIZE로 바꿔야 하므로 다음과 같이 보일 것입니다.

 extern double MYSTOPLOSS = 50;  // CUSTOM SL SIZE IN PIPS AFTER THE STOPLEVEL
extern double RISK =2; // 2% ACCOUNT RISK

double LOT =( AccountEquity ()*RISK)/( 100 *( MarketInfo ( Symbol (), MODE_STOPLEVEL )+MYSTOPLOSS)* MarketInfo (Symbol(), MODE_TICKVALUE )* 
MarketInfo (Symbol(), MODE_TICKSIZE )  * 100000 );

누구든지 이 아이디어가 옳다는 것을 확인할 수 있다면 문제가 해결된 것 같습니다. 그러니 빨리 도와주세요. 그럼 메리 크리스마스!

 
RaptorUK :

귀하의 코드를 제거했습니다. . . .


당신의 도움을 주셔서 감사합니다.
 
Proximus :

감사합니다. 하지만 이미 공식이 있습니다. USD가 아닌 EUR 계정이 있기 때문에 포인트 값만 수정하면 됩니다. 코드는 다음과 같습니다.

그리고 Point를 TICKVALUE* TICKSIZE로 바꿔야 하므로 다음과 같이 보일 것입니다.

누구든지 이 아이디어가 옳다는 것을 확인할 수 있다면 문제가 해결된 것 같습니다. 그러니 빨리 도와주세요. 그럼 메리 크리스마스!

확인할 수는 없지만 Alert()로 디버깅하는 것이 좋습니다. 이와 같이 ?

 Alert ( "LOT : " ,LOT);

또는

Alert("AccountEquity : ",(AccountEquity()," RISK : " ,RISK," MODE_STOPLEVEL : ", MODE_STOPLEVEL," MYSTOPLOSS : ",MYSTOPLOSS," MODE_TICKVALUE : " ,MODE_TICKVALUE," MODE_TICKSIZE : ,MODE_TICKSIZE);

그리고 당신은 스스로 그것을 확인할 것입니다.

 
maleas_k :

당신의 도움을 주셔서 감사합니다.
수정해주셔서 감사합니다
 
maleas_k :

확인할 수는 없지만 Alert()로 디버깅하는 것이 좋습니다. 이와 같이 ?

또는

그리고 당신은 스스로 그것을 확인할 것입니다.


아니요, 내가 의미하는 바는 WHRoeder가 제안한 대로 TICKVALUE* TICKSIZE 또는 TICKVALUE/TICKSIZE를 사용하는 것이 맞다는 것입니다. 왜냐하면 *가 거기에서 더 논리적으로 보이기 때문입니다. 따라서 내 계정이 EUR로 표시되는 경우 어느 것이 올바른 것입니까? 견적이 아닌 기본 통화 ?

 

Proximus : WTF guys, shouldnt that be TICKVALUE * TICKSIZE instead of TICKVALUE /TICKSIZE ? I think there is a big mistake there

 double LOT =( AccountEquity ()*RISK)/( 100 *( MarketInfo ( Symbol (), MODE_STOPLEVEL )+MYSTOPLOSS)* Point * 100000 );
  1. 예를 들어 USD 계정 통화가 있는 EURUSD.
    TickValue가 $10이고 Ticksize=0.0001인 경우. 시장이 0.0020으로 움직인다면 가치는 $10/0.0001 * 0.0020=$200 / 로트당입니다. 핍당 $10 * 20핍/로트당.
    TickValue가 $1이고 Ticksize=0.00001인 경우. 시장이 0.0020 움직이면 값은 $1/0.00001 * 0.0020=$200 / 로트당 여전히 있습니다. 실수는 없습니다.
  2. 그것은 가짜 100 * stoploss, StopLevel, Point * 10000 등의 방정식 입니다. 내 원래 방정식 을 다시 읽고 lotsize를 해결하십시오.
 

좋아, 다음은 (최대) 볼륨 크기 계산 을 위한 단계 여야 합니다.

(틀린거 있으면 지적해주세요^_^)

AccountMoneyRisk = AccountMoney * 위험 %

AccountCounterQuote = 견적(AccountCurrency/CounterCurrency)

CounterCurrencyRisk = AccountMoneyRisk * AccountCounterQuote

PipValue = CounterCurrencyRisk / 손절매

LotTickValue = LotSize * TickSize

거래량 = PipValue * LotTickValue


예시:

계정통화: EUR
통화쌍: GBPUSD
기본 통화: GBP
카운터 통화: USD

AccountMoney: 5000 유로
위험: 1%

손절매: 200 (상대 통화)
LotSize: 100000 (상대 통화)
틱 크기: 0.00001

AccountMoneyRisk = AccountMoney * Risk% = 5000 EUR * 1% = 50 EUR

AccountCounterQuote = Quote(AccountCurrency/CounterCurrency) = Quote(EUR/USD) = 1.5000

CounterCurrencyRisk = AccountMoneyRisk * AccountCounterQuote = 50 EUR * 1.5000 = 75 USD

PipValue = CounterCurrencyRisk / 손절매 = 75 / 200 = 0.375

LotTickValue = LotSize * TickSize = 100000 * 0.00001 = 1 USD

거래량 = PipValue * LotTickValue = 0.375 * 1 USD = 0.375



 

그것은 CounterCurrency가 AccountCurrency 동일하고 스프레드를 포함하지 않는다고 가정 하고 pip ==가 5자리 브로커 의 포인트이고 ticksize == 포인트라고 잘못 가정합니다.

반드시는 아닙니다. 계정 잔고 * 퍼센트 = 위험 = (OrderOpenPrice - OrderStopLoss)*DIR * OrderLots * DeltaPerlot (참고 OOP-OSL에는 SPREAD가 포함됨)

 

Ok 이것은 최종 버전입니다. 정확한지 확인하십시오. EUR 계정이 있기 때문에 내 상황에서 분명히 작동하지 않을 때 DeltaPerlot 항목을 주장하는 이유를 이해하지 못합니다.

이것은 내 로트 크기 조정 기능입니다.

 extern int STOPSLIP= 20 ;
extern double RISK= 0.5 ;

double LOT()
{
double clot=( AccountEquity ()*RISK)/( 100 *( MarketInfo ( Symbol (), MODE_STOPLEVEL )+ MarketInfo ( Symbol (), MODE_SPREAD )+STOPSLIP)* MarketInfo ( Symbol (), MODE_TICKVALUE )* MarketInfo ( Symbol (), MODE_TICKSIZE ) * 100000 );

if (clot< MarketInfo ( Symbol (), MODE_MINLOT )) clot= MarketInfo ( Symbol (), MODE_MINLOT );
if (clot> MarketInfo ( Symbol (), MODE_MAXLOT )) clot= MarketInfo ( Symbol (), MODE_MAXLOT ); 
   return (clot);
} 
  • STOPSLIP은 현재 stoplevel+SPREAD에 X 양의 핍을 추가합니다.
  • 나는 USD가 아닌 EUR 계정을 가지고 있기 때문에 TICKVALUE * TICKSIZE를 사용합니다. 따라서 pipvalue는 EUR 환율로 계산되기 때문에 5자리 중개인에서 0.00001 대신 0.000007이라는 것이 이해가 됩니다.
그래서 누군가가 그것이 올바른지 확인 하거나 그렇지 않은 경우 내 공식 을 수정하십시오. 다른 게시물에 대한 링크를 제공하지 마십시오. 내가 이해하지 못하기 때문에 내 LOT() 기능을 수정하면 행복할 것입니다. 도와주세요. !
 
double clot=( AccountEquity ()*RISK)/( 100 *( MarketInfo ( Symbol (), MODE_STOPLEVEL )+ MarketInfo ( Symbol (), MODE_SPREAD )+STOPSLIP)
            * MarketInfo ( Symbol (), MODE_TICKVALUE )* MarketInfo ( Symbol (), MODE_TICKSIZE ) * 100000 );

이것은 대괄호를 해결하려고 애쓰는 것만으로도 두통을 줍니다!

솔직히 말해서, 나는 당신이 여기서 달성하려는 것이 무엇인지 전혀 모릅니다.

MODE_STOPLEVEL 또는 SPREAD가 어떻게 관련되는지 알 수 없습니다. 확실히 현재 가격에서 손절매 거리를 기반으로 계산해야 합니까?

계정 통화 가 무엇이든 차이가 없어야 하며 TICKVALUE가 계정 통화로 표시되기 때문에 계산이 동일해야 합니다.

코드 줄을 2줄로 배치하면 게시물이 그렇게 넓지 않고 좌우로 스크롤하지 않고도 쉽게 읽을 수 있습니다. :)