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

 
Anton Balakirew :
총각 또는 약세 캡처의 신호에 대한 주문을 여는 아이디어, 매수/매도에 대한 하나의 거래와 보류 중인 주문 에 대한 하나의 거래만 있도록 만드는 방법 , 나는 각 틱에서 엽니다 거래. 문제를 해결하는 데 도움이 됩니다.
새 포지션을 열거나 새로운 보류 주문을 하기 전에 주문한 주문 수와 열려 있는 포지션 수를 확인하십시오.
 
Artyom Trishkin :

글쎄, 당신은 또한 이것을 할 수 있습니다 : 여기 범위의 각 양초에 대해 경기가 기록됩니다. 이전 버전에서는 하나의 양초에 대해서만 일치 항목이 작성되었습니다. 즉, 이 항목에 일치하는 항목에 대해서는 일치 항목이 더 이상 작성되지 않았습니다.

아르템, 고마워. 나는 이것을 정리할 것이다.

파코 :

높은 값은 반올림할 수 있습니다. 예를 들어 값 1.23456은 1.2346으로 반올림됩니다.


반올림이 명확합니다. 나는 또한 높은 값이 동일한 것으로 간주되는 편차 값을 설정할 수있는 설정에 변수를 추가했습니다. 그녀가 필요하기 때문입니다. 4자리 따옴표의 경우에는 대개 그런 문제가 없지만 5자리 따옴표의 경우 정확히 일치하는 항목을 끝없이 검색할 수 있습니다.

 
Andrey Koldorkin :

아르템, 고마워. 나는 이것을 정리할 것이다.

반올림이 명확합니다. 나는 또한 높은 값이 동일한 것으로 간주되는 편차 값을 설정할 수있는 설정에 변수를 추가했습니다. 그녀가 필요하기 때문입니다. 4자리 따옴표의 경우에는 대개 그런 문제가 없지만 5자리 따옴표의 경우 정확히 일치하는 항목을 끝없이 검색할 수 있습니다.

별말씀을요. 두 번째 버전에서 그는 부정확했습니다. 첫 번째 버전에서는 사이클 인덱스의 다음 캔들부터 일치 항목을 검색했기 때문에 두 개의 극단적 캔들을 비교하기 위해 메인 사이클의 통과는 캔들 개수에서 1을 뺀 값이었습니다. 이제 두 번째 버전에서는 각 양초에 대해 전체 범위에서 일치 항목을 검색하므로 행에서

 for ( int i= 0 ; i<copy_bars- 1 ; i++) {                             // цикл по скопированным данным от начала до "на один меньше размера массива"

검색 막대 수 를 다음으로 변경해야 합니다.

 for ( int i= 0 ; i<copy_bars; i++) {                             // цикл по скопированным данным от начала до конца диапазона
 
Artyom Trishkin :
새 포지션을 열거나 새로운 보류 주문을 하기 전에 주문한 주문 수와 열려 있는 포지션 수를 확인하십시오.

즉, 거래조건 에 주문수 와 포지션을 확인하기 위한 조건을 추가해야 하는 것인가?

// if (o4>c4&&o3>c3&&l2>l1&&c2<c1&&o2>c2&&o1<c1&&c1>o2&&h1>h2||o2>c1&&h2>h1&&h1<o2&&o1<c1&&l2>l3&&o3>c 첫 번째 조건

if (OrdersTotal()==0) //두 번째 조건

OrderSend(Symbol(), OP_BUY,Lot,o,10,l1,0); } ........................... 각 트랜잭션에 대해 그렇게 합니까?

그리고 어떤 함수가 열린 위치의 수를 계산합니까?

문제를 해결한 것 같습니다:

if (시()>=0&&시()<23){

if (o4>c4&&o3>c3&&l2>l1&&c2<c1&&o2>c2&&o1<c1&&c1>o2&&h1>h2||o2>c1&&h2>h1&&h1<o2&&o1<c1&&l2>l3&&o3>c1&&o3>

if (PositionsTotal()<=1)

OrderSend(Symbol(), OP_BUY,Lot,o,10,l1,0); } //구매 열기

if (o4>c4&&o3>c3&&l2>l1&&c2<c1&&o2>c2&&o1<c1&&c1>o2&&h1>h2||o2>c1&&h2>h1&&h1<o2&&o1<c1&&l2>l3&&o3>c1&&o3>

if (PositionsTotal()==1&&OrderType()==0)

OrderSend(Symbol(), OP_SELLSTOP,Lot,l2,10,h2,0);} //SellStop 보류 주문

if (o4<c4&&o3<c3&&h2<h1&&c2>c1&&o2<c2&&o1>c1&&c1<o2&&l1<l2||o2<c1&&l2<l1&&l1>o2&&o1>c1&&h2<c3&&o4<c3&&o3<

if (PositionsTotal()<=1)

OrderSend(Symbol(),OP_SELL,Lot,o,10,h1,0); } //판매 열기

if (o4<c4&&o3<c3&&h2<h1&&c2>c1&&o2<c2&&o1>c1&&c1<o2&&l1<l2||o2<c1&&l2<l1&&l1>o2&&o1>c1&&h2<c3&&o4<c3&&o3<

if (PositionsTotal()==1&&OrderType()==1)

OrderSend(Symbol(), OP_BUYSTOP,Lot,h2,10,l2,0);} //BuyStop 보류 주문

}

//+----------------------------------------------- --------------------+

// 열린 포지션의 총 개수를 반환하는 함수 |

// |

//+----------------------------------------------- --------------------+

int PositionsTotal() {

정수 위치 = 0;

for (int i=0; i<OrdersTotal(); i++) {

주문 선택(i, SELECT_BY_POS, MODE_TRADES);

if (OrderType() == OP_BUY || OrderType() == OP_SELL)

포스++;

}

리턴(포지션);

}

//+----------------------------------------------- --------------------+

 
Artyom Trishkin :

글쎄, 당신은 또한 이것을 할 수 있습니다 : 여기 범위의 각 양초에 대해 경기가 기록됩니다. 이전 버전에서는 하나의 양초에 대해서만 일치 항목이 작성되었습니다. 즉, 이 항목에 일치하는 항목에 대해서는 일치 항목이 더 이상 작성되지 않았습니다.

좋은. 그러나 내가 이해하는 것처럼 양초 2의 고가가 양초 7의 고가와 일치하면 2 <=> 7, 7 <=> 2라는 두 개의 일치 항목이 발견됩니다. 추가 주기 없이만 역쌍을 설명하는 것은 어떻습니까?

중첩 for:))) 루프를 사용하지 않고 한 번에 문제를 해결하는 것이 약한가요?

 
Vasiliy Sokolov :

좋은. 그러나 내가 이해하는 것처럼 양초 2의 고가가 양초 7의 고가와 일치하면 2 <=> 7, 7 <=> 2라는 두 개의 일치 항목이 발견됩니다. 추가 주기 없이만 역쌍을 설명하는 것은 어떻습니까?

중첩 for:))) 루프를 사용하지 않고 한 번에 문제를 해결하는 것이 약한가요?

:) 약할 필요 없어요 ;;) 물론 1주기로 해결될 수 있을 것 같지만 너무 게을러서 더 이상 생각하지 못했습니다 - 바로 생각나는 대로 했습니다.

당연히 여기에는 모든 쌍과 더 많은 양초가 각 양초의 일치 데이터에 기록됩니다. 그것이 그들이 서로를 참조하는 이유입니다. 나는 옵션을 제공할 뿐이며 그것이 무엇을 위한 것인지 잘 모릅니다.

그러면 계산 최적화 문제를 해결할 수 있지만 저는 그럴 필요가 없습니다.

각 양초와 모든 성냥에 대한 데이터가 정확히 필요하고 갑자기, 갑자기, 갑자기 ... 발생하는 경우에만 ....

일반적으로 시간과 욕망이 없습니다. 그래서 저는 제 코드를 작성하는 대신 시간을 보냈습니다.

ZY, 아마도 원하는 입력 매개변수를 알고 있는 Kohonen의 방법을 연결하는 것이 가치가 있을 것입니다.

 
Artyom Trishkin :

일반적으로 시간과 욕망이 없습니다. 그래서 저는 제 코드를 작성하는 대신 시간을 보냈습니다.

죄송합니다. 죄송합니다.
 
Vasiliy Sokolov :
죄송합니다. 죄송합니다.
예, 문제는 흥미롭지 만 아아, 시간이 없습니다.
 
Artyom Trishkin :

별말씀을요. 두 번째 버전에서 그는 부정확했습니다. 첫 번째 버전에서는 사이클 인덱스의 다음 캔들부터 일치 항목을 검색했기 때문에 두 개의 극단적 캔들을 비교하기 위해 메인 사이클의 통과는 캔들 개수에서 1을 뺀 값이었습니다. 이제 두 번째 버전에서는 각 양초에 대해 전체 범위에서 일치 항목을 검색하므로 행에서

검색 막대 수 를 다음으로 변경해야 합니다.

다음 줄의 의미를 알려주십시오.

입력 int Search_Period=10; // 복사된 양초의 수

int searchPeriod=(Search_Period<1)?1:Search_Period; // "?", ":" 기호는 무엇을 의미합니까?

입력 int Delta=2; // 허용 포인트의 수

int delta=(델타<0)?0:델타; // "?", ":" 기호는 무엇을 의미합니까?

 
Andrey Koldorkin :

다음 줄의 의미를 알려주십시오.

입력 int Search_Period=10; // 복사된 양초의 수

int searchPeriod=(Search_Period<1)?1:Search_Period; // "?", ":" 기호는 무엇을 의미합니까?

입력 int Delta=2; // 허용 포인트의 수

int delta=(델타<0)?0:델타; // "?", ":" 기호는 무엇을 의미합니까?

 // строку int searchPeriod=(Search_Period<1)?1:Search_Period;
// можно расписать так:

input int Search_Period= 10 ; // Количество копируемых свечей ... эту строку вы видите в настройках
int searchPeriod;           // Сюда будем записывать входной параметр
if (Search_Period< 1 ) searchPeriod= 1 ; // Если во входном параметре ввели ноль или меньше нуля, то параметр будет равен единице
else searchPeriod=Search_Period;     // иначе примем входной параметр

// соответственно и строку int delta=(Delta<0)?0:Delta;
// можно расписать точно так же

도움말에서:

조건 연산자 ?:

삼항 연산자 의 일반적인 형식은 다음과 같습니다.

1 ? 식 2 : 식 3

첫 번째 피연산자("expression1")로 모든 표현식을 사용할 수 있으며 그 결과는 bool 값입니다. 결과가 true이면 두 번째 피연산자, 즉 "expression2"로 지정된 명령문이 실행됩니다.

첫 번째 피연산자가 false 이면 세 번째 피연산자 "expression3"이 실행됩니다. 두 번째 및 세 번째 피연산자, 즉 "expr2" 및 "expr3"은 동일한 유형의 값을 반환해야 하며 void 유형이 아니어야 합니다. 조건문의 수행 결과는 "expression1"의 결과에 따라 "expression2"의 결과 또는 "expression3"의 결과가 된다.

//--- 일일 범위에서 시가와 종가의 차이를 정규화합니다.

이중 true_range = (높음==낮음)? 0 :(닫기-열림)/(높음-낮음);

이 표기법은 다음과 같습니다.

이중 true_range;

if (높음==낮음)true_range= 0 ; // 높낮이가 같으면

else true_range=(닫기-열림)/(높음-낮음); // 범위가 0이 아닌 경우

사유: