Yedelkin: 개장 시 입찰가가 1.2695라면 이미 5핍의 손실이 자동으로 발생합니다. 동시에 개발자의 아이디어에 따라 SL이 50핍이라면 45핍이 더 불리한 방향으로 지나가야 스톱로스가 발동됩니다. 즉, 스톱로스가 발동될 때 입찰가는 1.2645가 아니라 1.2650에, 매도가는 1.2655에 각각 있어야 합니다.
1. 개장 시 5핍 손실에 대해.
손실에 대해 맞습니다. 같은 순간에 포지션을 청산하면 (조건부로) 스프레드 금액, 즉 바로 5핍의 손실이 발생합니다.
롱은 매수(카운터) 가격으로 청산되기 때문입니다.
적어도 논리적으로 이 경우에는 이 손실이 발생해야 합니다(그리고 이는 맞습니다).
이는 카운터 주문으로 청산할 때도 마찬가지입니다. 카운터 주문이 1.2695의 가격(현재 입찰가)에서 발동되면 어떤 결과가 나올까요?
숏 포지션의 개시호가인 Ask?
2. BU 종가를 처리해 봅시다.
우리는 1.27에 매수 포지션을 개시한 것을 기억합니다(이 가격은 이제 우리에게 BU 레벨입니다).
매수 호가가 1.27에 도달하면 (즉, 정확히 5핍 상승하면) BU 청산이 발생한다고 가정하는 것이 합리적입니다.
카운터 주문의 도움으로 CU에서 청산하여 명세서를 확인해 봅시다. 이러한 포지션의 시가는 1.27에 있어야 하며, 아시다시피 매도 주문은 Bid에서 이루어집니다. 현재 입찰가는 1.2695입니다. 따라서 BU에서 청산하려면 5 핍을 통과해야하므로 계산에 오류가 없으며 진술이 정확합니다.
두 번째 설명에 따라 예시의 SL 및 TP 가격을 결정합니다. 시초가 1.27에서 SL = 1.2650, TP = 1.28 (위에서 설명한 조건에 따라).
첫 번째 문에 따르면 매도호가(Ask)가 1.27(5핍 스프레드 기준 매수호가 1.2695)이 되는 조건에서 롱(예시에서는 롱)이 열립니다.
이제 어떤 조건에서 SL과 TP가 발동되는지 알아봅시다.
조건 중 하나가 충족되면 포지션이 청산됩니다(다른 요인이 없는 경우):
TP에서 - Bid가 1.28(1.27에서 100핍)에 도달하면 이 때 Ask는 1.2805(첫 번째 주문과 스프레드 규칙의 크기)가 됩니다.
카운터 포지션을 사용하여 TP에서 청산하여 명세서를 확인해 봅시다. 이러한 포지션의 시가는 1.28에 있어야 하며, 아시다시피 매도 주문은 매수 호가에 체결됩니다. 현재 Bid는 1.2695에 있습니다. 따라서 TP에서 청산하려면 (스프레드 손실을 충당하기 위해) 5핍 + 100핍을 넘겨야 수익을 확정할 수 있습니다.
SL에서 - 가격이 우리가 기억하는 1.2650에 해당하는 SL 수준에 도달하면.
이제 어떤 가격이 될지 이해해 봅시다. 논리적으로, 그것은 입찰 가격 (카운터 주문의 개시 가격에 해당)이어야합니다.
현재 (포지션 개시 조건에 따라) Bid가 1.2695라는 것을 기억합니다. 따라서 SL이 발동되기 전에 가격이 45핍을 통과해야 합니다.
따라서 SL이 발동되기 전에 가격이 통과할 시간이 있었던 스프레드(5핍) + 45핍과 같은 손실을 기록하게 됩니다.
이 관점에서 보면 맞습니다.
카운터 포지션을 사용하여 SL에서 청산하여 명세서를 확인해 봅시다. 이러한 포지션의 시가는 1.2650이어야 하며, 아시다시피 매도 주문은 Bid에서 열립니다. 현재 Bid는 1.2695에 있습니다. 따라서 SL에서 청산하려면 45핍을 통과해야 합니다. SL이 발동되면 50핍의 손실이 기록됩니다(스프레드 5핍 + 당사에 대한 이동 45핍).
PS
그러나 이러한 관점에서 볼 때 MQL4에 대한이 예제는 저에게 그다지 명확하지 않습니다.
int ticket;
if(iRSI(NULL,0,14,PRICE_CLOSE,0)<25)
{
ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Bid-25*Point,Ask+25*Point,"My order #"+counter,16384,0,Green);
if(ticket<0)
{
Print("OrderSend failed with error #",GetLastError());
return(0);
}
}
더 정확하게는 어떤 논리와 어떤 진술에 근거하여 SL과 그것 만 고려되는지 명확하지 않습니다.
// 이전 막대(막대 1)의 종가를 해당 전문가 조언자 변수에 복사합니다.
Cexpert.setCloseprice(mrate[1].close); // 바 1 종가//--- 매수 포지션이 있는지 확인if (Cexpert.checkBuy()==true)
{
if (Buy_opened)
{
Alert("우리는 이미 매수 포지션이 있습니다!!!");
return; // 롱 포지션에 추가하지 마십시오.
}
double aprice = NormalizeDouble(latest_price.ask,_Digits);
double stl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits);
double tkp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits);
int mdev = 100;
// 주문하기
Cexpert.openBuy(ORDER_TYPE_BUY,Lot,aprice,stl,tkp,mdev);
}
매수 포지션을 오픈하려면 최신_가격.매도 호가에 초점을 맞춰야 하지만, 해당 포지션에 손절매와 이익실현을 설정할 때는 최신_가격.매수 호가에 초점을 맞춰야 합니다. 이것이 맞나요? 코드 텍스트의 매도 호가를 기준으로 손절매와 이익실현이 설정되는 이유는 무엇인가요? 오기인가요, 아니면 특정 전략의 특성인가요(매도 포지션을 개시할 때 코드 구조가 비슷합니다)?
при этом для ее корректного выполнения требуются уже установленные параметры symbol и period :
//+-----------------------------------------------------------------------+// 클래스의 공용 함수 //+-----------------------------------------------------------------------+/*
초기화 중
*/void MyExpert::doInit(int adx_period,int ma_period)
{
//--- ADX 표시기 핸들 가져오기
ADX_handle=iADX(symbol,period,adx_period);
//--- 이동 평균 표시기 핸들 가져오기
MA_handle=iMA(symbol,period,ma_period,0,MODE_EMA,PRICE_CLOSE);
однако, заполнение этих параметров конкретными значениями происходит позже, уже после Cexpert.doInit :
//--- 초기화 함수 시작
Cexpert.doInit(ADX_Period,MA_Period);
//--- 클래스 객체에 필요한 모든 변수를 설정합니다.Cexpert.setPeriod(_Period);// 마침표를 설정합니다.Cexpert.setSymbol(_Symbol); // 기호(통화쌍)를 지정합니다.
Никак не пойму, как может правильно выполниться Cexpert.doInit, если переменной symbol пока не присвоено
значение (или как-то присвоено ?) Застрял тут и дальше никак . Спасибо.
개장 시 입찰가가 1.2695라면 이미 5핍의 손실이 자동으로 발생합니다. 동시에 개발자의 아이디어에 따라 SL이 50핍이라면 45핍이 더 불리한 방향으로 지나가야 스톱로스가 발동됩니다. 즉, 스톱로스가 발동될 때 입찰가는 1.2645가 아니라 1.2650에, 매도가는 1.2655에 각각 있어야 합니다.
1. 개장 시 5핍 손실에 대해.
손실에 대해 맞습니다. 같은 순간에 포지션을 청산하면 (조건부로) 스프레드 금액, 즉 바로 5핍의 손실이 발생합니다.
롱은 매수(카운터) 가격으로 청산되기 때문입니다.
적어도 논리적으로 이 경우에는 이 손실이 발생해야 합니다(그리고 이는 맞습니다).
이는 카운터 주문으로 청산할 때도 마찬가지입니다. 카운터 주문이 1.2695의 가격(현재 입찰가)에서 발동되면 어떤 결과가 나올까요?
숏 포지션의 개시호가인 Ask?
2. BU 종가를 처리해 봅시다.
우리는 1.27에 매수 포지션을 개시한 것을 기억합니다(이 가격은 이제 우리에게 BU 레벨입니다).
매수 호가가 1.27에 도달하면 (즉, 정확히 5핍 상승하면) BU 청산이 발생한다고 가정하는 것이 합리적입니다.
카운터 주문의 도움으로 CU에서 청산하여 명세서를 확인해 봅시다. 이러한 포지션의 시가는 1.27에 있어야 하며, 아시다시피 매도 주문은 Bid에서 이루어집니다. 현재 입찰가는 1.2695입니다. 따라서 BU에서 청산하려면 5 핍을 통과해야하므로 계산에 오류가 없으며 진술이 정확합니다.
3. SL과 TP 정보
여기에는 두 가지 문장이 적용됩니다:
а. 롱은 매도 호가에 오픈하고 매수 호가에 청산, 숏은 매수 호가에 오픈하고 매도 호가에 청산.
б. TP 및 SL까지의 거리는 시가에서 계산되며, 계산은 포지션의 방향을 고려합니다.
두 번째 설명에 따라 예시의 SL 및 TP 가격을 결정합니다. 시초가 1.27에서 SL = 1.2650, TP = 1.28 (위에서 설명한 조건에 따라).
첫 번째 문에 따르면 매도호가(Ask)가 1.27(5핍 스프레드 기준 매수호가 1.2695)이 되는 조건에서 롱(예시에서는 롱)이 열립니다.
이제 어떤 조건에서 SL과 TP가 발동되는지 알아봅시다.
조건 중 하나가 충족되면 포지션이 청산됩니다(다른 요인이 없는 경우):
TP에서 - Bid가 1.28(1.27에서 100핍)에 도달하면 이 때 Ask는 1.2805(첫 번째 주문과 스프레드 규칙의 크기)가 됩니다.
카운터 포지션을 사용하여 TP에서 청산하여 명세서를 확인해 봅시다. 이러한 포지션의 시가는 1.28에 있어야 하며, 아시다시피 매도 주문은 매수 호가에 체결됩니다. 현재 Bid는 1.2695에 있습니다. 따라서 TP에서 청산하려면 (스프레드 손실을 충당하기 위해) 5핍 + 100핍을 넘겨야 수익을 확정할 수 있습니다.
SL에서 - 가격이 우리가 기억하는 1.2650에 해당하는 SL 수준에 도달하면.
이제 어떤 가격이 될지 이해해 봅시다. 논리적으로, 그것은 입찰 가격 (카운터 주문의 개시 가격에 해당)이어야합니다.
현재 (포지션 개시 조건에 따라) Bid가 1.2695라는 것을 기억합니다. 따라서 SL이 발동되기 전에 가격이 45핍을 통과해야 합니다.
따라서 SL이 발동되기 전에 가격이 통과할 시간이 있었던 스프레드(5핍) + 45핍과 같은 손실을 기록하게 됩니다.
이 관점에서 보면 맞습니다.
카운터 포지션을 사용하여 SL에서 청산하여 명세서를 확인해 봅시다. 이러한 포지션의 시가는 1.2650이어야 하며, 아시다시피 매도 주문은 Bid에서 열립니다. 현재 Bid는 1.2695에 있습니다. 따라서 SL에서 청산하려면 45핍을 통과해야 합니다. SL이 발동되면 50핍의 손실이 기록됩니다(스프레드 5핍 + 당사에 대한 이동 45핍).
PS
그러나 이러한 관점에서 볼 때 MQL4에 대한이 예제는 저에게 그다지 명확하지 않습니다.
더 정확하게는 어떤 논리와 어떤 진술에 근거하여 SL과 그것 만 고려되는지 명확하지 않습니다.
그러나이 예제를 기반으로 (그리고 그것에서만) 다음을 얻습니다.
Open = 1.27, SL = 1.2645 및 TP = 1.28 값을 기준으로 다음을 이해합니다:
1. Ask가 1.27의 가격에 도달하면 포지션이 열립니다 (우리의 경우 이미 거기에 있음);
2. BU 레벨은 1.27의 가격에 있으며, 이를 청산하려면 심볼의 비율(이 경우 EUR)이 스프레드 크기(이 경우 5핍)만큼 증가해야 합니다;
3. 오픈하는 순간 논리적 진술에 따라 오픈 포지션은 카운터 주문으로 마감되어야하기 때문에 즉시 스프레드 금액에서 손실을 입습니다 (포지션을 즉시 마감하는 경우). MQL4 코드에서 이러한 작업은 다음과 같이 표시됩니다.
4. 가격이 1.28 수준에 도달하면 TP가 트리거됩니다. 논리적으로 이 가격에 카운터 주문이 열리므로 이 가격이 매수호가여야 합니다(매수호가 값이 1.28에 도달하면 거래가 체결됩니다). 이를 기준으로 MQL4 코드의 종가는 다음과 같이 표시되어야 합니다.
5. SL은 거래되는 심볼의 환율(이 경우 EUR)이 개장 시점보다 50핍 하락한 후에 발동됩니다.
이제 가장 흥미로운 것은
MQL4 도움말의 동일한 예제(수천 명이 사용한 고전적인 예제)를 바탕으로 시장가 포지션의 개설을 확인해 보겠습니다.
다음 코드를 사용하여 확인하겠습니다.
알파리 서버에서 이 코드를 실행하면(실제 따옴표 사용) 다음과 같은 결과가 나옵니다.
이 경우 다음과 같은 크기를 얻을 것이라고 쉽게 추측할 수 있습니다. SL = 516 (또는 4 자리의 경우 51 핍) TP = 1000 (또는 4 자리의 경우 100 핍)
PPS
MQL4 도움말을 살펴봅시다:
"여기 진실이 어디 있죠?"...?
코드의 다음 부분이 이해가 되지 않습니다:
매수 포지션을 오픈하려면 최신_가격.매도 호가에 초점을 맞춰야 하지만, 해당 포지션에 손절매와 이익실현을 설정할 때는 최신_가격.매수 호가에 초점을 맞춰야 합니다. 이것이 맞나요? 코드 텍스트의 매도 호가를 기준으로 손절매와 이익실현이 설정되는 이유는 무엇인가요? 오기인가요, 아니면 특정 전략의 특성인가요(매도 포지션을 개시할 때 코드 구조가 비슷합니다)?코드의 이 부분은 다음 문구를 기준으로 이해해야 합니다:
а. 매수 - 매도 호가에 개시하고 매도 호가에 청산; 매도 - 매수 호가에 개시하고 매도 호가에 청산;
б. 포지션은 카운터 주문으로 청산됩니다;
в. BU 레벨은 시가에 있습니다;
г. TP 및 SL까지의 거리는 시가(CU 레벨)에서 계산됩니다;
д. TP는 입찰가가 오픈가 + 이익 크기와 같은 수준에 도달하면 트리거됩니다;
e. SL은 유가증권이 지정가 - 손실 크기와 동일한 입찰가에 도달하면 트리거됩니다.
전문가 어드바이저의 저자도 이와 유사한 설명을 사용했을 가능성이 높습니다. 모든 것을 가능한 한 명확하게 설명하기 위해 다음 화면(빨간색 사각형에 관심이 있습니다)을 통해 위의 내용을 그림으로 보여드리겠습니다.
e. SL은 입찰가가 공개가 - 손실 크기와 같은 수준에 도달하면 트리거됩니다.
감사합니다, 논리를 이해했습니다. 그러나 여전히 "e"에 따르면 스톱로스가 발동될 때 Bid는 1.2645가 아니라 1.2650에, Ask는 1.2655에 각각 있어야 합니다.
감사합니다, 논리를 이해했습니다. 그러나 여전히 포인트 "e"에 따르면 손절매가 발동되면 입찰가는 1.2645가 아니라 1.2650에, 요청은 각각 1.2655에 있어야 합니다.
그럴 수 있으므로 시장에서 손절매를 트리거 할 때 정확히 어떤 일이 발생하는지 확인해야합니다 (또는 사용 가능한 모든 청산 가능성을 고려하여 매트릭스 모델을 조정하십시오)....
포인트 "E"의 경우 (내가 이해하는대로)
Open (Ask)에서 계산하는 경우 1.27-50 = 1.2650 (가격이 45 핍을 통과하고 포즈가 닫힘)이 될 것입니다 (내가 올바르게 이해했다면). 이 경우 SL은 1.2650에 입찰하고 1.2655에 요청해야한다고 생각합니다.
또 다른 한 가지는 Bid에서 계산하면 1.2695-50 - 1.2645의 가격을 얻을 수 있습니다 (수학으로 논쟁 할 수 없습니다). Bid에서 SL을 계산하면 1.27-1.2645 = 55 핍이 나옵니다 (제가 알기로는 계획에 포함되지 않은 것으로 알고 있습니다).
PS
적어도이 모델을 사용하면 공개 가격에서 SL 및 TP 수준을 올바르게 나눌 수 있습니다 (제 생각에는 올바르게)...
물론 실제로 가격이 어떻게 계산되어야하는지에 대한 개발자의 공식 의견을 듣는 것은 흥미로울 것입니다 (SL 및 TP뿐만 아니라).
질문.
100달러 - 루블화인가요, 유로화인가요? ;)
질문.
100달러 - 루블화인가요, 유로화인가요? ;)
잘 정리된 예제에 감사드립니다.
하지만 이것이 맞는지 물어봐야 하나요?
EA에서는 새로운 바가 시작될 때마다 거래 기회를 확인하고 있습니다.
클래스 함수 getbuffers()에서 막 형성된 현재 바 0에서 시작하여 마지막 3개 바 데이터를 검색하므로 값이 잘못되었습니다.
void MyExpert::getBuffers()
{
if(CopyBuffer(ADX_handle,0,0,3,ADX_val)<0 || CopyBuffer(ADX_handle,1,0,3,plus_DI)<0
|| CopyBuffer(ADX_handle,2,0,3,minus_DI)<0 || CopyBuffer(MA_handle,0,0,3,MA_val)<0)
위치 1에서 시작하는 마지막 3 개의 막대 표시기 데이터를 검색하지 않아야합니까?
고마워요
훌륭한 기사 사무엘
이 귀중한 기사에 미리 감사드립니다,
이 기사를 기반으로 IsNewBar 또는 Buy_opened와 같은 함수를 클래스에 추가하고 EA에서 호출하기만 하면 됩니다.
다시 한번 감사드립니다,
더 많은 기사를 보고 싶습니다,
Hamed,
제가 이해하지 못하는 부분을 이해하도록 도와주세요:
EA의 맨 처음에 함수가 호출됩니다: