1건. 만약 2개의 포지션이 열려있다면, 이익이 더 많은 포지션을 닫습니다... 2번째 경우. 2개 이상의 포지션이 열리면 값을 평균화하여 닫습니다...
이제 두 가지 방법을 사용하여 그러한 위치를 닫습니다.
첫 번째 경우에는 이익으로 포지션을 비교하고 이익이 더 높은 포지션을 청산하고, 두 번째 경우에는 모든 포지션을 평균화하여 주식으로 청산합니다.
이러한 방법은 개별적으로는 잘 작동하지만 함께는 그렇지 않습니다. 두 이벤트 중 하나가 두 방법의 분포에 속하기 때문입니다.
그리고 나는 그것들을 분리할 수 없는 것 같다. 결과적으로 두 경우 모두 주식에 의해 주로 마감되며 모든 포지션이 마감됩니다. 이로 인해 첫 번째 경우 원하는 위치가 삭제되고 다시 열립니다.
결과적으로. 더블 스프레드, 더블 커미션. 짜증난다)))
주문 및 포지션 배치 방식은 다음과 같습니다. SELL의 경우(그리고 SELL 의 경우에만)
주문 제한. SELL_LIMIT_
위치. 팔다(항상 주문 사이)
주문을 중지합니다. SELL_STOP_
첨부된 도표입니다.
클로징 포지션.
하나. 중지 주문이 트리거된 경우, 즉, 동시에 두 개 이상의 포지션이 나타나면 한 포지션을 청산해야 합니다. 이익 이상... (20)
2. 지정가 주문 이 발동된 경우, 즉 두 개 이상의 포지션이 동시에 열려 있는 경우 다음 값으로 평균을 내어 해당 포지션을 청산해야 합니다...(15)
문제. 이 두 메서드를 분리하여 자체 이벤트만 처리하도록 하는 방법은 무엇입니까?
아마도 이 두 가지 조건을 처리하는 다른 방법이 있습니까?
내가 사용하는 방법의 예.
//+---------------------------------------------------------------------+//| -- ЗАКРЫВАЕМ ОДНУ ИЗ ДВУХ ПОЗИЦИЙ С НИЗУ, ГДЕ ПРОФИТ БОЛЬШЕ ЧЕМ ---|//+---------------------------------------------------------------------+ ulong ticket_n= ULONG_MAX ; double profit= DBL_MIN ;
if (invert_close == true ) //Проверка на наличие 2х и более поз.
{
int positions= PositionsTotal ();
for ( int i= PositionsTotal ()- 1 ; i>= 0 ; i--)
{
ulong tmp_ticket= PositionGetTicket (i);
if (ticket_n!= 0 )
{
double tmp_profit= PositionGetDouble ( POSITION_PROFIT );
if (tmp_profit>profit+Prof_eqw_niz) // допустим 20
{
ticket_n=tmp_ticket;
profit=tmp_profit;
}
}
}
//-----------if (ticket_n!= ULONG_MAX )
m_trade.PositionClose(ticket_n);
invert_close = false ;
Print ("------ ЗАКРЫЛИ ТОЛСТУЮ ---------"); }
//+---------------------------------------------------------------------+//| Э К В И Т И ДЛЯ SELL_LIMIT |//+---------------------------------------------------------------------+
npos_ALL= 0 ; NPos_ALL(npos_ALL);
if (npos_ALL>=Metod_Eqw && m_account.Equity()>= m_account.Balance()+Prof_eqw) //Допустим 15
{
CloseAllPositions();
Print ( "------ ЗАКРЫЛИ ВСЕ ---------" );
}
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
일반적으로 어떤 보류 주문 이 실행되었는지는 중요하지 않습니다. 결국 우리는 포지션을 얻은 다음 포지션의 이익을 계산합니다.
네, 상관없습니다. 나는 주문과 위치를 지정할 때 내 위치, 내 주문에 대한 "설명"을 할당했기 때문에 차이점을 의심했습니다. 결과적으로 주문이 위치에 들어갈 때 주문 주석을 상속합니다.
그러다 댓글을 통해 입장을 확인하다 혼란이 왔는데... 댓글이 달라졌다. 글쎄, 나는 그것을 수정했다.
귀하의 코드에서 SELL_LIMIT가 작동한 조건에 대해 위치가 어떻게 마감되는지 전혀 찾거나 이해하지 못했습니다. 주식으로.
if (total== 2 )
{
//-------------------------------------------------------- conditon 1ulong tmp_ticket= ULONG_MAX ;
double tmp_profit= DBL_MIN ;
for ( int i= PositionsTotal ()- 1 ; i>= 0 ; i--)
if (m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif (m_position. Symbol ()==m_symbol.Name() && m_position.Magic()==InpMagic)
{
double profit=m_position.Commission()+m_position.Swap()+m_position.Profit();
if (profit>tmp_profit)
{
tmp_profit=profit;
tmp_ticket=m_position.Ticket();
}
}
//---if (tmp_ticket!= ULONG_MAX )
m_need_close_ticket=tmp_ticket;
}
else
{
if (total== 2 )
{
//--------------------------------------------------------- conditon 2double profit= 0 ;
for ( int i= PositionsTotal ()- 1 ; i>= 0 ; i--)
if (m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif (m_position. Symbol ()==m_symbol.Name() && m_position.Magic()==InpMagic)
profit+=m_position.Commission()+m_position.Swap()+m_position.Profit();
//--------if (profit>=InpProfitTarget)
m_need_close_all= true ;
}
}
모든 포지션을 폐쇄할 가능성이 있는지 확인하고 플래그를 설정한 것으로 보입니다.
그러나 CloseAllPositions();
if (m_need_close_all)
{
if (IsPositionExists())
{
CloseAllPositions();
return ;
}
else
m_need_close_all= false ;
}
그런 것이 빠져 있습니다.
if (m_account.Equity()>= m_account.Balance()+ 15 )
케이스에 대한 모든 직책을 닫아야 하는 경우 - SELL_LIMIT 작업
아마도 동일한 m_account.Equity()>= m_account.Balance()+15가 어떻게든 다르게 구현되었습니까?
아니면 정말 당신을 위해 작동하지 않습니까? 아마도 내가 이해에서 평균이 무엇인지 설명하지 않았기 때문일 것입니다.
mql5 (헤지)
구현 방법 포지션을 2로 마감 하는 알고리즘 정황?
1건. 만약 2개의 포지션이 열려있다면, 이익이 더 많은 포지션을 닫습니다... 2번째 경우. 2개 이상의 포지션이 열리면 값을 평균화하여 닫습니다...
이제 두 가지 방법을 사용하여 그러한 위치를 닫습니다.
첫 번째 경우에는 이익으로 포지션을 비교하고 이익이 더 높은 포지션을 청산하고, 두 번째 경우에는 모든 포지션을 평균화하여 주식으로 청산합니다.
이러한 방법은 개별적으로는 잘 작동하지만 함께는 그렇지 않습니다. 두 이벤트 중 하나가 두 방법의 분포에 속하기 때문입니다.
그리고 나는 그것들을 분리할 수 없는 것 같다. 결과적으로 두 경우 모두 주식에 의해 주로 마감되며 모든 포지션이 마감됩니다. 이로 인해 첫 번째 경우 원하는 위치가 삭제되고 다시 열립니다.
결과적으로. 더블 스프레드, 더블 커미션. 짜증난다)))
주문 및 포지션 배치 방식은 다음과 같습니다. SELL의 경우(그리고 SELL 의 경우에만)
주문 제한. SELL_LIMIT _
위치. 팔다 (항상 주문 사이)
주문을 중지합니다. SELL_STOP _
첨부된 도표입니다.
클로징 포지션.
하나. 중지 주문이 트리거된 경우, 즉, 동시에 두 개 이상의 포지션이 나타나면 한 포지션을 청산해야 합니다. 이익 이상... (20)
2. 지정가 주문 이 발동된 경우, 즉 두 개 이상의 포지션이 동시에 열려 있는 경우 다음 값으로 평균을 내어 해당 포지션을 청산해야 합니다...(15)
문제. 이 두 메서드를 분리하여 자체 이벤트만 처리하도록 하는 방법은 무엇입니까?
아마도 이 두 가지 조건을 처리하는 다른 방법이 있습니까?
내가 사용하는 방법의 예.
위치는 고문이 일하는 기호로 열립니까? 매직넘버 사용
예, 현재 기호에 대해. 예, 마법이 사용됩니다.
예, 현재 기호에 대해. 예, 마법이 사용됩니다.
두 번째 조건을 설명하십시오. 그것은 무엇을 의미합니까? ( 2개 이상의 포지션이 오픈된 경우, 값당 평균을 내서 마감합니다... )
두 번째 조건을 설명하십시오. 그것은 무엇을 의미합니까? ( 2개 이상의 포지션이 오픈된 경우, 값당 평균을 내서 마감합니다... )
이는 다음을 의미합니다. 두 개 이상의 포지션이 열려 있고 자기자본 이 잔액보다 일정 값(15라고 가정해 봅시다)만큼 크면 모든 포지션이 닫힙니다.
예를 들어. 3개의 포지션이 오픈되었습니다. 첫 번째에 현재 손실은 -10, 두 번째에는 -5, 세 번째에는 +15의 양으로 이익 +30이며 모든 것을 닫을 수 있습니다.
평균 이익 + 15에 도달하지 않은 경우 포지션은 사전 설정된 SL 또는 TP에서 마감됩니다. (이것은 포지션을 청산 하는 세 번째 조건과 비슷하지만 문제가 없으므로 침묵했습니다.)
이는 다음을 의미합니다. 두 개 이상의 포지션이 열려 있고 자기자본 이 잔액보다 일정 값(15라고 가정해 봅시다)만큼 크면 모든 포지션이 닫힙니다.
예를 들어. 3개의 포지션이 오픈되었습니다. 첫 번째에 현재 손실은 -10, 두 번째에는 -5, 세 번째에는 +15의 양으로 이익 +30이며 모든 것을 닫을 수 있습니다.
평균 이익 + 15에 도달하지 않은 경우 포지션은 사전 설정된 SL 또는 TP에서 마감됩니다. (이것은 포지션을 청산 하는 세 번째 조건과 비슷하지만 문제가 없으므로 침묵했습니다.)
다음은 두 가지 조건에 대한 전체 코드입니다.
다음은 두 가지 조건에 대한 전체 코드입니다.
블라디미르 감사합니다. 나는 그것을 알아 내려고 노력할 것입니다.
나름대로 해결해 보았는데 이 두 조건이 어떻게 분리될 수 있는지 이해가 갑니다.
예를 들어.
3개의 부울 변수를 선언합시다.
위치_1;
Pos_2_Clos_1;
Pos_2_Clos_All;
1. 오픈 포지션 의 수를 확인합니다.
만약에 우리는 1개의 포지션만 열려 있습니다 SE LL 할당 의미:
Pos_1=참; Pos_2_Clos_1=거짓; Pos_2_Clos_All = false ;
2개의 포지션이 열려 있고 자산 금액이 양수이면(SELL_S TOP 주문이 트리거될 때만 발생할 수 있음) 이 이벤트에 부울 값을 할당합니다.
Pos_1= 거짓 ; Pos_2_Clos_1= 참 ; Pos_2_Clos_All = false ;
2개의 포지션이 열려 있고 자본 금액이 음수이면(SELL_LIMIT 주문이 트리거될 때만 발생할 수 있음),
Pos_1= 거짓 ; Pos_2_Clos_1= 거짓 ; Pos_2_Clos_All = true ;
그게 다인듯... 부울 변수에 대한 검사를 실행하고 자신의 닫는 방법을 할당할 수 있지만 어떤 이유로 이것은 저에게 효과가 없었습니다 ...
나는 여전히 쓸모없는 프로그래머입니다. 아마도 어딘가에서 실수를 저질렀을 것입니다 ...
도와 주셔서 감사합니다)
블라디미르 카르푸토프 :
블라디미르. 내가 할 수 없는 일. SELL_STOP 주문이 실행되면 모든 것이 정상입니다. 더 많은 이익을 내는 하나의 포지션만 청산되고,
하지만 SELL_LIMIT가 발동되면 모든 오픈 포지션의 이익의 합산이 아니라 클로징이 잘못 발생하지만, 이익이 더 높은 포지션은 청산되는 것처럼 보입니다.
전에 비슷한 오류가 있었습니다. 이제 나는 이미 그것이 일종의 잼이라고 생각하기 시작했습니다. 아마도 포즈를 세지 않고 여는 것일 수 있습니다.
테스트할 준비가 된 내 코드를 보면 오류가 표시될 수 있습니다. 그러나 코드에도 불일치가 있을 수 있습니다. 아니면 내가 어떻게 든 잘못 설명했습니다 .., 나에게 평균 이익은 무엇입니까.
나는 이제 알고리즘을 다루기 시작했고 앞서 말한 것보다 결과가 다소 복잡하다는 것을 깨달았습니다.
자신의 SL 로 포지션을 청산하기 위한 세 번째 조건은 처음 두 조건의 알고리즘에 오류를 유발할 수 있습니다.
SEL_STOP 케이스가 정상적으로 실행되기 때문에 SELL_LIMIT 케이스에 대해서만 포지션을 닫기 위한 완전한 알고리즘을 다시 한 번 설명하겠습니다. 일단 놔두자.
1. 우리는 처음에 하나의 열린 SELL 포지션 을 가지고 있으며 자체 SL 세트를 가지고 있지만 SELL_LIMIT보다 높으므로 SL은 SELL_LIMIT 이전에 작동하지 않습니다.
2. SELL_LIMIT가 트리거되고 두 번째 SELL 위치가 자체 SL과 함께 나타납니다. 이는 다음 SELL_LIMIT 이전에도 트리거될 수 없습니다.
3. SELL_LIMIT 주문이 실행되면 새로운 SELL_LIMIT 주문이 설정됩니다. (언제나)
4. 열린 SELL 포지션의 수는 1-3 또는 그 이상이 될 수 있으며, 이는 모두 SL이 얼마나 멀리 있는지에 달려 있습니다. 최대 3개가 있는 경우를 고려하십시오. (SL에 한정할 수 있습니다)
이제 포지션을 마감하는 시나리오입니다.
열려있는 경우 pos. 2, 그러면 하나 또는 모든 포지션을 청산 하는 두 가지 시나리오만 가능합니다.
1. Equity 기준으로 잔액이 15 이상인 경우( 모든 포지션은 청산 ), (m_account.Equity()>= m_account.Balance()+15) 여러 포지션을 청산하겠다는 뜻이었습니다. 평균을 내서.
2. 자신의 SL에 의해(하나의 위치가 닫힘).
3. 어떤 조건을 적용할지 모르기 때문에 나머지 한 포지션은 이전에 설정한 경우 마감 조건에서 지워져야 합니다.
SELL_LIMIT 스크립트를 반복하거나 SEL_STOP으로 이동하여 다른 닫기 조건을 따를 수 있습니다. (조건을 재설정)
4. 포지션이 3개 라면 그것도 닫는다 (m_account.Equity()>= m_account.Balance()+15) 또는 그 중 하나가 SL 을 트리거하고 두 위치가 남습니다.
클로징 조건이 정의되지 않은 포지션이 하나 남을 때까지 이 규칙을 적용합니다...
블라디미르 카르푸토프 :
블라디미르. 내가 할 수 없는 일. SELL_STOP 주문이 실행되면 모든 것이 정상입니다. 더 많은 이익을 내는 하나의 포지션만 청산되고,
하지만 SELL_LIMIT가 발동되면 모든 오픈 포지션의 이익의 합산이 아니라 클로징이 잘못 발생하지만, 이익이 더 높은 포지션은 청산되는 것처럼 보입니다.
전에 비슷한 오류가 있었습니다. 이제 나는 이미 그것이 일종의 잼이라고 생각하기 시작했습니다. 아마도 포즈를 세지 않고 여는 것일 수 있습니다.
테스트할 준비가 된 내 코드를 보면 오류가 표시될 수 있습니다. 그러나 코드에도 불일치가 있을 수 있습니다. 아니면 내가 어떻게 든 잘못 설명했습니다 .., 나에게 평균 이익은 무엇입니까?
일반적으로 어떤 보류 주문 이 실행되었는지는 중요하지 않습니다. 결국 우리는 포지션을 얻은 다음 해당 포지션의 이익을 계산합니다.
일반적으로 어떤 보류 주문 이 실행되었는지는 중요하지 않습니다. 결국 우리는 포지션을 얻은 다음 포지션의 이익을 계산합니다.
네, 상관없습니다. 나는 주문과 위치를 지정할 때 내 위치, 내 주문에 대한 "설명"을 할당했기 때문에 차이점을 의심했습니다. 결과적으로 주문이 위치에 들어갈 때 주문 주석을 상속합니다.
그러다 댓글을 통해 입장을 확인하다 혼란이 왔는데... 댓글이 달라졌다. 글쎄, 나는 그것을 수정했다.
귀하의 코드에서 SELL_LIMIT가 작동한 조건에 대해 위치가 어떻게 마감되는지 전혀 찾거나 이해하지 못했습니다. 주식으로.
모든 포지션을 폐쇄할 가능성이 있는지 확인하고 플래그를 설정한 것으로 보입니다.
그러나 CloseAllPositions();
그런 것이 빠져 있습니다.
케이스에 대한 모든 직책을 닫아야 하는 경우 - SELL_LIMIT 작업
아마도 동일한 m_account.Equity()>= m_account.Balance()+ 15가 어떻게든 다르게 구현되었습니까?
아니면 정말 당신을 위해 작동하지 않습니까? 아마도 내가 이해에서 평균이 무엇인지 설명하지 않았기 때문일 것입니다.