대략 이런 방식으로 자기자본을 추적할 수 있으므로 자기자본 이익의 주어진 비율에 도달하면 모든 포지션을 닫고 주문을 삭제합니다.
//--------------------------------------------------------------// Описание глобальных переменных советника// ----------------- Трал эквити -------------externdouble PercentEquityForClose= 15 ;
double Equ_OLD,
Equ_NEW,
EquPerc,
Equ_Start;
// ---- Дальнейшее описание глобальных переменных советника//==========================================================int init() // Функция init
{
Equ_OLD=AccountEquity();
Equ_Start=Equ_OLD;
EquPerc=Equ_Start/ 100 *PercentEquityForClose;
// ---- Дальнейший код функции ----return ; // Выход из init()
}
//==========================================================// ---- В функции слежения за событиями ----// ---- вызываемой из функции start ----
Equ_NEW=AccountEquity(); // С новым тиком запоминаем текущее значение эквитиif (Equ_OLD!=Equ_NEW) // Если новое значение не равно старому, то
{
if (Equ_NEW>=Equ_OLD+EquPerc) // Если эквити увеличилось по отношению к своему прошлому значению на EquPerc процентов,
{
ClosePosFirstProfit( NULL , - 1 , - 1 ); // то закрываем все позиции
DeleteOrders( NULL , - 1 , - 1 ); // и удаляем все ордера
Equ_NEW=AccountEquity(); // Запоминаем текущее значение эквити
Equ_OLD=Equ_NEW; // и заносим его в "прошлое" значение для проверки на изменение на след. тике
}
}
또 무릎을 꿇고 작성해서 오타가 있을 수 있습니다... 각 막대의 형평성 변화를 추적하려면 새 막대 가 열리는지 확인하는 것으로 충분합니다. 그렇다면 다음 코드를 실행합니다.
Equ_NEW=AccountEquity(); // С новым тиком запоминаем текущее значение эквитиif (Equ_OLD!=Equ_NEW) // Если новое значение не равно старому, то
{
if (Equ_NEW>=Equ_OLD+EquPerc) // Если эквити увеличилось по отношению к своему прошлому значению на EquPerc процентов,
{
ClosePosFirstProfit( NULL , - 1 , - 1 ); // то закрываем все позиции
DeleteOrders( NULL , - 1 , - 1 ); // и удаляем все ордера
Equ_NEW=AccountEquity(); // Запоминаем текущее значение эквити
Equ_OLD=Equ_NEW; // и заносим его в "прошлое" значение для проверки на изменение на след. тике
}
}
sllawa3 : 주식이 잔액보다 높다면 .. 열려 있는 모든 것을 마감하기 위해 에퀴티를 증가에서 감소로 변경하는 데 관심이 있습니다.
다음과 같은 곳:
Equ_NEW=AccountEquity(); // С новым тиком запоминаем текущее значение эквитиif (Equ_OLD!=Equ_NEW) // Если новое значение не равно старому, то
{
if ( NormalizeDouble (Equ_NEW-Equ_OLD, 8 )< 0 ) // Если эквити уменьшилось по отношению к своему прошлому значению,
{
ClosePosFirstProfit( NULL , - 1 , - 1 ); // то закрываем все позиции
DeleteOrders( NULL , - 1 , - 1 ); // и удаляем все ордера.
Equ_NEW=AccountEquity(); // Запоминаем текущее значение эквити
Equ_OLD=Equ_NEW; // и заносим его в "прошлое" значение для проверки на изменение на след. тике
}
}
// (NormalizeDouble(Equ_NEW-Equ_OLD,8) <0 ) - возможно здесь нужно сравнивать не с нулём, а с каким-то числом, // а то может в последующем и не дать увеличиться балансу, // постоянно закрывая вновь открываемые позиции (они ведь требуют залога)
내 생각에는 내가 옳다 .. 나도 의심이 든다 ...
대략 이런 방식으로 자기자본을 추적할 수 있으므로 자기자본 이익의 주어진 비율에 도달하면 모든 포지션을 닫고 주문을 삭제합니다.
또 무릎을 꿇고 작성해서 오타가 있을 수 있습니다...
각 막대의 형평성 변화를 추적하려면 새 막대 가 열리는지 확인하는 것으로 충분합니다. 그렇다면 다음 코드를 실행합니다.
이런게 있는거 같은데...
당연히 당신이 옳습니다. 막대당 한 번만 판독하는 코드가 이미 있다고 가정했습니다.
주식이 잔액보다 높다면 .. 열려 있는 모든 것을 마감하기 위해 에퀴티를 증가에서 감소로 변경하는 데 관심이 있습니다.
다음은 새 막대를 정의하는 함수입니다.
... 나는 자본이 잔액보다 높다면 자산을 증가에서 감소로 변경하는 데 관심이 있습니다. 열려 있는 모든 것을 닫으려면 ..
그런 다음 각 틱 의 에퀴티를 확인해야 합니다. 결국, 예를 들어 시간 단위로 일하는 경우 다음 형평성 확인 1시간 전에 바로 이 형평성이 이미 절망적으로 처질 수 있습니다...
따라서 우리는 자기자본이 몇 퍼센트 증가했는지 비교하는 것이 아니라 Equ -OLD 변수에 기록된 마지막 틱의 상태와 관련하여 어리석은 증가 또는 감소를 Equ_NEW 의 현재 값과 비교합니다.
주식이 잔액보다 높다면 .. 열려 있는 모든 것을 마감하기 위해 에퀴티를 증가에서 감소로 변경하는 데 관심이 있습니다.
다음과 같은 곳:
그러나 이것은 기성 코드가 아니라 생각을 위한 음식일 뿐입니다...
틀림없이. 이것만 스톱이 아니라 보류 중인 주문이라고 합니다. 터미널을 엽니다. 그 안에 F1 키를 누릅니다. 나타나는 창에서 내용 - 거래 - 주문 유형을 엽니다.
))) 감사합니다. 하지만 펀드 후, 매수 및 매도의 실행은 거래 대신 당황/비정상적이며, 뭔가 혼란스러울 때 - 의심을 없애기 위해 어리석은 질문을 주저하지 마십시오. )))
말하다 . 딜러의 소수점 이하 자릿수는 다섯 자리입니다. 시가에서 n,bars를 뺀 값 을 구해야 합니다 .iOpen(NULL,0,n) 함수는 소수점 이하 네 자리만 제공합니다(인쇄를 통해 얻은 판독값). 문제를 해결하는 방법. 미리 감사드립니다.
말하다 . 딜러의 소수점 이하 자릿수는 다섯 자리입니다. 시가에서 n,bars를 뺀 값을 구해야 합니다.iOpen(NULL,0,n) 함수는 소수점 이하 네 자리만 제공합니다(인쇄를 통해 얻은 판독값). 문제를 해결하는 방법. 미리 감사드립니다.
Print()는 소수점 이하 4자리까지 반올림합니다. 이중 유형을 콘솔에 올바르게 인쇄하려면( iOpen() 이 이 경우 소수점 이하 5자리의 정확도로 반환함 ) DoubleToStr() 함수를 사용해야 합니다.
문자열 DoubleToStr ( 이중 값, 정수 숫자)
숫자 값을 지정된 정밀도 형식으로 숫자의 문자 표현을 포함 하는 텍스트 문자열 로 변환합니다.
옵션:
value - Величина с плавающей точкой.
digits - Формат точности, число цифр после десятичной точки (0-8).
주식이 잔액보다 높다면 .. 열려 있는 모든 것을 마감하기 위해 에퀴티를 증가에서 감소로 변경하는 데 관심이 있습니다.
그리고 어떻게 작동하는지에 대한 예가 여기 있습니다... 저는 특별히 각각의 새로운 바에서 포지션을 열었습니다... 그것은 "DC 킬러"로 밝혀졌습니다... :)
첨부된 테스터의 보고서에는 제한이 없고 각 틱의 개시 위치가 미친 비율입니다... 그리고 손실이 없습니다 :) 유감스럽게도 아무도 당신이 그렇게 일하도록 허용하지 않을 것입니다...
다음은 보고서의 사진입니다.
그러한 "습격"으로 나는 거의 손실 없이 많은 돈을 모았고, 테이크에 도달할 시간조차 없었습니다(상단에서 볼 수 있습니다).