포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 640

 

안녕 동지들!

MT5에는 " Elliott Impulse Wave "와 "Elliott Corrective Wave"와 같은 훌륭하고 매우 필요한 도구가 있습니다.

질문은 이것입니다. MT5에서 MT4로 이러한 도구를 어떻게든 통합할 수 있습니까?

나는 MT4에서 거래하고, 분석을 위해 MT5로 이동하는 것은 그다지 편리하지 않습니다.

또는: 문제를 해결할 수 있는 다른 방법은 무엇입니까?

 
안녕하세요. 언어에는 MarketInfo( Symbol() , MODE_TICKVALUE )와 같은 시장 매개변수가 있습니다. 이 값이 어떻게 계산되는지 일반적인 용어로 설명할 수 있습니까?
 
mql_writer :
안녕하세요. 언어에는 MarketInfo(Symbol(), MODE_TICKVALUE )와 같은 시장 매개변수가 있습니다. 이 값이 어떻게 계산되는지 일반적인 용어로 설명할 수 있습니까?

이것은 1.00이 많은 예금 통화로 최소 가격 변경 (1핍)의 비용입니다! 그것은 매우 간단하게 계산됩니다: 1.00(lot)/ 1.36030(현재 시점의 유로달러 호가) = 0.7351(유로).
 
borilunad :

이것은 1.00이 많은 예금 통화로 최소 가격 변경(1핍)의 비용입니다! 그것은 매우 간단하게 계산됩니다: 1.00(lot)/ 1.36030(현재 시점의 유로달러 호가) = 0.7351(유로).

여기에서만 마케팅 정보를 통해 요청하면 엔을 제외한 모든 쌍에 대해 10을 반환합니다.)))


이 공식을 어디서 얻었습니까?

 
evillive :

여기에서만 마케팅 정보를 통해 요청하면 엔을 제외한 모든 쌍에 대해 10을 반환합니다.)))


이 공식을 어디서 얻었습니까?


나는 모든 공식을 스스로 수행하고 이제는 일정에서 가져 왔습니다.

그리고 이것은 Doki에서 가져온 것입니다.

MODE_TICKVALUE

열여섯

예금 통화로 표시된 상품 가격의 최소 변동 금액

계산은 공유되지 않습니다.

 
borilunad :


나는 모든 공식을 스스로 수행하고 이제는 일정에서 가져 왔습니다.

그리고 이것은 Doki에서 가져온 것입니다.

MODE_TICKVALUE

열여섯

예금 통화로 표시된 상품 가격의 최소 변동 금액

계산은 공유되지 않습니다.


그것이 바로 내가 스크립트로 설정하고 항상 반환하는 값입니다. 10 ) 1 유로달러 로트의 경우 1포인트는 실제로 $10이므로 모든 것이 정확합니다.

그리고 그것을 보여주기를 부끄러워하는 사람들 만이 계산, 수학을 공유하지 않습니다. 그것은 아프리카의 수학입니다.

예, 이 경우 공식을 다시 실행해야 합니다. MODE_TICKVALUE = MODE_LOTSIZE * MODE_TICKSIZE - 유로달러의 경우 십자가와 엔의 경우 공식이 약간 다릅니다.

 
Top2n :


솔직히 어떻게 신청하는지 이해가 가지 않았습니다. 밀리미터 끝까지 남아 있는데, 거의 모든 것이 끝나면 멈추는 것이 아쉽습니다.

객체의 시간 (2nd parameter+3600sec>current)||(첫 번째 매개변수의 시간 - 2번째 매개변수의 시간)<3600sec 인 경우 배열에 가격을 쓰지 않는 작업입니다.

왜 오류를 에뮬레이트합니까?

오류 - 시스템의 한계/고장과 관련된 어떤 이유로 알고리즘을 실행하고 일부(물론 제한적이지만 - ) 보장으로 결과를 얻을 수 없음을 신호하기 위한 것입니다. FillAndPrint() 함수는 웅변적이며 잘못된 상황이 의미하는 것과 그렇지 않은 것을 보여줍니다. 오류가 발생하면 결과를 생성하려고 하지도 않습니다. 오류가 발생하지 않으면 결과를 신뢰할 수 있습니다. 이것이 "오류/오류 아님" 논리를 구축하는 방법입니다.

여기서 알고리즘의 수정도 필요합니다. 또한 추가 필터를 부과해야 합니다.

다음과 같이 해야 합니다.

 /******************************************************************************/
bool AddValueIfFiltered( double &array[], const string name) {
#define MIN_SECS_BETWEEN_PRICE1_AND_PRICE2 3600
#define MAX_SECS_AFTER_PRICE2               3600

   const datetime dt1 = ( datetime )ObjectGet(name, OBJPROP_TIME1);
   const datetime dt2 = ( datetime )ObjectGet(name, OBJPROP_TIME2);
   const datetime dt = TimeCurrent ();

   Print ( "name = " , name, ", dt = " , dt, ", dt1 = " , dt1, ", dt2 = " , dt2);

   if (dt <= dt2 + MAX_SECS_AFTER_PRICE2 && dt1 + MIN_SECS_BETWEEN_PRICE1_AND_PRICE2 <= dt2) { // Фильтруем, прежде чем попытаться добавить
     if (!AddValue(array, ObjectGetValueByShift(name, 1 ))) { // Пытаемся добавить
       return false ; // Ошибка, значение не добавлено
    }
  }

   return true ; // Нет ошибки, значение, если удовлетворило условию фильтра, добавлено к массиву
}

/******************************************************************************/
bool AddValueIfFound( double &array[], const string name) {
   const int type = ObjectType(name);

   if (type == OBJ_TREND ) {
     switch (( color )ObjectGet(name, OBJPROP_COLOR )) { // Тип color допустимо использовать в switch
     case Goldenrod:
     case Gainsboro:
     case White:
       if (!AddValueIfFiltered(array, name)) { // Пропускаем через фильтр
         return false ;
      }
    }
  }

   return true ; // Нет ошибки, значение, если найдено, добавлено к массиву
}

먼저 개체의 유형과 매개변수를 기준으로 "필터링"하고 사용 가능한 모든 개체에서 필요한 개체만 선택한 다음 추가 필터를 적용했습니다. 사람이 어떻게 할 것인지에 대해. 인간이라면 이런 짓을 하지 않을까?

이러한 작은 하위 작업 각각에 대해 별도의 기능이 자체적으로 제안됩니다.

매우 특별한 경우를 제외하고는 표현식에 숫자가 없어야 합니다. 그런 다음 표현식에서 숫자 2를 직접 사용할 수 있습니다. 그리고 다른 유사한 매우 드문 경우.

그렇지 않으면 니모닉을 사용해야 합니다. 첫째, 주어진 장소에서 일어나는 일에 대한 이해를 크게 향상시켜 실수의 가능성을 줄이는 데 기여합니다. 그리고 둘째, 값 자체가 한곳에 설정되어 필요에 따라 쉽게 변경할 수 있고, 니모닉을 사용하지 않고 알고리즘에서 숫자를 반복해서 사용하는 경우에 비해 실수가 불가능할 것이다. , 알고리즘의 여러 위치에서 숫자를 편집해야 합니다.

실행 결과:

 02 : 08 : 46 Script 2 EURUSDm,H1: loaded successfully
02 : 08 : 46 2 EURUSDm,H1: initialized
02 : 08 : 46 2 EURUSDm,H1: Sell:
02 : 08 : 46 2 EURUSDm,H1: name = downtrendline1, dt = 2014.06 . 24 22 : 09 : 02 , dt1 = 2014.06 . 24 10 : 00 : 00 , dt2 = 2014.06 . 24 17 : 00 : 00
02 : 08 : 46 2 EURUSDm,H1: Найдено объектов: 0
02 : 08 : 46 2 EURUSDm,H1: Buy:
02 : 08 : 46 2 EURUSDm,H1: name = uptrendline0, dt = 2014.06 . 24 22 : 09 : 02 , dt1 = 2014.06 . 23 09 : 00 : 00 , dt2 = 2014.06 . 24 16 : 00 : 00
02 : 08 : 46 2 EURUSDm,H1: Найдено объектов: 0
02 : 08 : 46 2 EURUSDm,H1: uninit reason 0
02 : 08 : 46 Script 2 EURUSDm,H1: removed

개체를 찾을 수 없습니다. 두 니모닉의 값을 10배 증가시켜 36000(10시간)으로 만들고 다시 실행해 보겠습니다.

 02 : 09 : 03 Script 2 EURUSDm,H1: loaded successfully
02 : 09 : 03 2 EURUSDm,H1: initialized
02 : 09 : 03 2 EURUSDm,H1: Sell:
02 : 09 : 03 2 EURUSDm,H1: name = downtrendline1, dt = 2014.06 . 24 22 : 09 : 14 , dt1 = 2014.06 . 24 10 : 00 : 00 , dt2 = 2014.06 . 24 17 : 00 : 00
02 : 09 : 03 2 EURUSDm,H1: Найдено объектов: 0
02 : 09 : 03 2 EURUSDm,H1: Buy:
02 : 09 : 03 2 EURUSDm,H1: name = uptrendline0, dt = 2014.06 . 24 22 : 09 : 14 , dt1 = 2014.06 . 23 09 : 00 : 00 , dt2 = 2014.06 . 24 16 : 00 : 00
02 : 09 : 03 2 EURUSDm,H1: Найдено объектов: 1
02 : 09 : 03 2 EURUSDm,H1: Price[ 0 ] = 1.35869
02 : 09 : 03 2 EURUSDm,H1: uninit reason 0
02 : 09 : 03 Script 2 EURUSDm,H1: removed

하나의 추세선이 이미 필터링을 "통과"했습니다. 이제 첫 번째 니모닉 값을 3600으로 복원하고 실행해 보겠습니다.

 02 : 09 : 12 Script 2 EURUSDm,H1: loaded successfully
02 : 09 : 12 2 EURUSDm,H1: initialized
02 : 09 : 12 2 EURUSDm,H1: Sell:
02 : 09 : 12 2 EURUSDm,H1: name = downtrendline1, dt = 2014.06 . 24 22 : 09 : 26 , dt1 = 2014.06 . 24 10 : 00 : 00 , dt2 = 2014.06 . 24 17 : 00 : 00
02 : 09 : 12 2 EURUSDm,H1: Найдено объектов: 1
02 : 09 : 12 2 EURUSDm,H1: Price[ 0 ] = 1.36152
02 : 09 : 12 2 EURUSDm,H1: Buy:
02 : 09 : 12 2 EURUSDm,H1: name = uptrendline0, dt = 2014.06 . 24 22 : 09 : 26 , dt1 = 2014.06 . 23 09 : 00 : 00 , dt2 = 2014.06 . 24 16 : 00 : 00
02 : 09 : 12 2 EURUSDm,H1: Найдено объектов: 1
02 : 09 : 12 2 EURUSDm,H1: Price[ 0 ] = 1.35869
02 : 09 : 12 2 EURUSDm,H1: uninit reason 0
02 : 09 : 12 Script 2 EURUSDm,H1: removed

이제 두 추세선 모두 필터링을 "통과"했음을 알 수 있습니다. 그건 그렇고, 이런 식으로 프로그램의 모든 분기(부분)를 디버깅하는 것이 좋습니다. 한 분기가 아닙니다.

어떻게든 공식화하는 데 도움이 되도록 이렇게 설명하겠습니다. 프로그램은 계획과 유사한 것으로 보입니다.

계획의 각 주요 지점은 더 작은 하위 계획의 지점으로 나눌 수 있습니다. 작게 - 더 작게. 가장 작은 하위 계획의 항목이 직접 실행됩니다.

각 계획, 하위 계획 및 가장 작은 하위 계획의 항목조차도 프로그램의 기능에 해당합니다. 가장 작은 하위 계획의 항목은 시스템 기능만 호출하거나 호출하지 않는 "종료" 기능에 해당합니다. 예를 들어 위에서 논의한 항목에서 AddValue() 또는 DiffInSecs()를 예로 사용할 수 있습니다. 위의 하위 계획의 항목은 아래의 하위 계획의 항목을 구현하는 기능을 호출 하는 기능에 해당합니다. 위에서 논의한 것 중 MassTrendNumber(), AddValueIfFound(), AddValueIfFiltered()가 있습니다. "낮은 수준" 함수는 "높은 수준" 함수를 호출해서는 안 되며, "높은 수준" 함수는 일반적으로 여러 수준 아래로 점프해서는 안 됩니다. 즉, 기본적으로 한 수준 아래에서만 함수를 호출해야 합니다. "낮은 수준"의 경우 이 규칙은 "높은 수준"보다 훨씬 엄격합니다.

누가 누구를 호출하는지에 대한 의미에서 이와 같은 트리 구조로 연결된 (짧은) 함수의 형태로 그 안에 있는 작업을 구성하여 프로그램을 빌드하십시오.

이 프로그램에서 퇴화 트리가 밝혀졌습니다. 한 가지가 여러 번 "분기"됩니다. 그리고 그것은 두 개의 작은 가지가 아니라 하나로 "가지"합니다. 그러나 요점은 "고수준" 기능이 일관되게 "저수준" 기능을 호출한다는 것입니다. 이 수정에서 나는 이 구조에 하나의 레벨을 더 삽입했는데, "비분기 분기"인 AddValueIfFiltered()가 하나 더 추가되었습니다.

 
죄송합니다 스레드를 보지 못했습니다
https://www.mql5.com/en/forum/152102 질문이 있습니다
 
borilunad :

모든 것이 정확합니다! 4자리 따옴표에서는 항상 1로 표시되고 5 자리 따옴표에서는 10으로 표시됩니다. 핍은 10배 더(그리고 더 작아졌습니다). 그리고 min.tick의 비용은 현재 가격에서 계산되어야 합니다!

저는 이제 4-sign을 가지고 있습니다. 유로달러에 1랏 1포인트 비용은 10달러이며 항상 이랬습니다. 십자가의 경우 비용은 8에서 16까지이며 공식이 조금 더 복잡합니다.

예를 들어, 유로 파운드에 대한 마케팅 정보는 16.984, 달러에 대한 파운드 환율 = 1.6984를 반환했습니다. *0.0001=10.0 또는 100000 * 0.00010 \u003d 10.0 - 원하는 대로).


이 모든 계산은 계정이 달러인 경우에만 정확합니다.

이 경우 xUSD(EURUSD, GBPUSD 등)의 경우 tickvalue = lot*point = 100000*0.0001 = 10.0

USDx의 경우(USDCHF, USDJPY 등) 틱값 = 랏*포인트/입찰가 = 100000*0.01/101.93=9.8107

교차 환율 xUSD/yUSD(EURGBP) 틱값 = 입찰가(yUSD)*랏*포인트 = 1.6980*100000*0.0001 = 16.98

xUSD/USDy(EURJPY) 교차 틱값 = lot*point/Bid(USDy) = 100000*0.01/101.91=9.8126

 
evillive :

저는 이제 4-sign을 가지고 있습니다. 유로달러에 1랏 1포인트 비용은 10달러이며 항상 이랬습니다. 십자가의 경우 비용은 8에서 16까지이며 공식이 조금 더 복잡합니다.

예를 들어, 유로 파운드에 대한 마케팅 정보는 16.984, 유로달러 환율 = 1.3604, 달러 대비 파운드 = 1.6984를 반환했습니다. 10.0(100000 * 0 ,0001=10.0 또는 100000*0.00010=10.0 - 원하는 대로).




모든 것이 간단하고 실용적입니다! 그리고 4자리 견적이 나왔을 당시에는 아직 프로그램을 작성하지 않아서 판단할 수 없습니다. :)

잘 자!