초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 852

 

거래를 열지 않습니다, 잼은 어디에 있습니까?

iRSI_handle= iRSI ( NULL , 0 , 15 , PRICE_OPEN );

double iRSI_buf[];

ArraySetAsSeries (iRSI_buf, true );

CopyBuffer (iRSI_handle, 0 , 0 , 20 ,iRSI_buf);

if (iRSI_buf[ 0 ]>60)

trader.Buy(Lot);
 
Askr :

거래를 열지 않습니다, 잼은 어디에 있습니까?

캔트 번호 1: 틱마다 새로운 표시기 HANDLE을 만듭니다.

캔트 번호 2: (아마도) 로트 변수에 잘못된 볼륨이 있습니다.

캔트 번호 3: (아마도) CTrade 클래스에 대한 주문 채우기 유형이 채워지지 않았습니다.


일반적으로 터미널(또는 테스터) 로그에는 무엇이 있습니까?

 
Kirill Belousov :

금액에 1SL의 통화 손실을 곱합니다.

그리고 손실이 1인 경우, 예를 들어 BO에서.

나는 같은 결과에 가깝지도 않은 수식의 값을 대체합니다.

뭐가 문제 야?

 double lot= 1.0 ;
double koef_lot= 2.0 ;
int seriya = 15 ;
double depo= 0.0 ;
depo=(lot*(koef_lot*seriya- 1 ))/(koef_lot- 1 );
   Comment ( " depo " ,depo);
 
Vladimir Karputov :

캔트 번호 1: 틱마다 새로운 표시기 HANDLE을 만듭니다.

캔트 번호 2: (아마도) 로트 변수에 잘못된 볼륨이 있습니다.

캔트 번호 3: (아마도) CTrade 클래스에 대한 주문 채우기 유형이 채워지지 않았습니다.


일반적으로 터미널(또는 테스터) 로그에는 무엇이 있습니까?

예, 이 코드는 온틱에 있었습니다.

 ArraySetAsSeries (iRSI_buf, true );

CopyBuffer (iRSI_handle, 0 , 0 , 20 ,iRSI_buf);

onit로 옮겼습니다. 나는 여기에서 기사를 읽었습니다. 그리고 그 기사에서 업무상 차이가 없다는 것을 깨달았지만 티켓팅에서 더 좋습니다. 하지만 나 자신을 위한 시인성 면에서는 1블록으로 모든 걸 한번에 하는게 더 편했고, 나 스스로 설정한 문제를 풀면서 순전히 나 자신을 위해서(배우고 있다.)

문제는 로트에 있었습니다. 로트 변수를 설정하는 것이 아니라 로트 반환 기능을 설정해야 했습니다(로트 계산 기능이 있었기 때문입니다).

이제 나는 lot 함수에서도 결함을 발견했습니다. 소수 자릿수가 많은 형식의 계산이 진행 중이며 결과적으로 트랜잭션을 열 수 없습니다. 불필요한 문자는 줄이고 2개만 남겨야 합니다.

 //параметры
input double       StartLot= 0.1 ;
input double       StartEquityLot= 10000 ;

//переменные
double KoefLotEQUITY; //разница эквити
double Lot;

//функция расчета текущего торгового лота
double LotF( double Lot)
{
KoefLotEQUITY= AccountInfoDouble ( ACCOUNT_EQUITY )/ StartEquityLot;
Lot=StartLot*KoefLotEQUITY;
//функция минимального возможного лота
if (Lot< 0.01 )
{
Lot= 0.01 ;
}

return (Lot);
} 

NormalizeDouble과 DoubleToStr은 아직 작동하지 않습니다 - 함수에 함수를 중첩할 수 없다고 나와 있습니다 - 그리고 아래에는 함수와 함께 작업을 삽입할 때 오류를 기록할 수 있습니다.


 
Askr :

예, 이 코드는 온틱에 있었습니다.

onit로 옮겼습니다. 나는 여기에서 기사를 읽었습니다. 그리고 그 기사에서 업무상 차이가 없다는 것을 깨달았지만 티켓팅에서 더 좋습니다. 하지만 나 자신을 위한 시인성 면에서는 1블록으로 모든 걸 한번에 하는게 더 편했고, 나 스스로 설정한 문제를 풀면서 순전히 나 자신을 위해서(배우고 있다.)

문제는 로트에 있었습니다. 로트 변수를 설정하는 것이 아니라 로트 반환 기능을 설정해야 했습니다(로트 계산 기능이 있었기 때문입니다).

이제 나는 lot 함수에서도 결함을 발견했습니다. 소수 자릿수가 많은 형식의 계산이 진행 중이며 결과적으로 트랜잭션을 열 수 없습니다. 불필요한 문자는 줄이고 2개만 남겨야 합니다.

NormalizeDouble과 DoubleToStr은 아직 작동하지 않습니다 - 함수에 함수를 중첩할 수 없다고 나와 있습니다 - 그리고 아래에는 함수와 함께 작업을 삽입할 때 오류를 기록할 수 있습니다.


MQL5에서는 표시기 핸들을 한 번만 작성하고 OnInit에서만 작성해야 합니다. 이것은 공리입니다. 모든 틱마다 OnTick에서 표시기 핸들을 생성할 수 없습니다. 이것은 잘못된 것입니다.

올바른 로트 정규화는 거래 클래스 CSymbolInfo:: NormalizePrice 에 있습니다.

 
Vladimir Karputov :

MQL5에서는 표시기 핸들을 한 번만 작성하고 OnInit에서만 작성해야 합니다. 이것은 공리입니다. 모든 틱마다 OnTick에서 표시기 핸들을 생성할 수 없습니다. 이것은 잘못된 것입니다.

올바른 로트 정규화는 거래 클래스 CSymbolInfo:: NormalizePrice 에 있습니다.

틀렸어, 나는 이것에 대해 논쟁하지 않는다. 하지만!!! 매 틱마다 생성하면 무엇이 달라지나요??? 값도 변하지 않습니다.

 
Alexey Viktorov :

틀렸어, 나는 이것에 대해 논쟁하지 않는다. 하지만!!! 매 틱마다 생성하면 무엇이 달라지나요??? 값도 변하지 않습니다.

의미는 어떻습니까? 스크립트에 추가 작업만 하면 됩니다.

 
Alexey Viktorov :

틀렸어, 나는 이것에 대해 논쟁하지 않는다. 하지만!!! 매 틱마다 생성하면 무엇이 달라지나요??? 값도 변하지 않습니다.

최근 기사 중 하나에서 MQL5가 MQL4 스타일 코딩의 단점을 효과적으로 방지한다는 것을 보여주었습니다. 각 틱마다 핸들이 생성됩니다. 메모리는 더 이상 사용되지 않지만 최소한 작업 속도는 떨어집니다. 그러나 반복합니다. MQL4 스타일의 MQL5 언어로 지표를 생성 하는 것은 잘못된 방법입니다. MQL5로 전환한 경우 프로그래밍 스타일을 다시 빌드해야 합니다.

 
Konstantin Nikitin :

의미는 어떻습니까? 스크립트에 추가 작업만 하면 됩니다.

물론 의미가 없습니다. 드러머에게는 숨겨진 질문이었습니다. 이미 신경증이 있는 사람처럼 여기고 Caps Lock을 켜는 이유는 무엇입니까?

 

즉, 결과는 같으나 자연스럽게 실행에 있어서는 무의미하고 훨씬 더 바빠서 글을 보고 이해하게 된 것입니다.

그들이 기사에서 그것에 대해 쓸 생각을했다면 일반적으로 왜 같은 일을 여러 번하는지 이미 분명합니다.

하지만 스스로 이해하고 작업하고 고민한 후 최적화하지 않기 위해 글을 쓰는 목표가 있었습니다.
사유: