오류, 버그, 질문 - 페이지 804 1...797798799800801802803804805806807808809810811...3184 새 코멘트 [삭제] 2012.08.08 08:51 #8031 ilunga : 추신: 내(및 귀하의) 코드에서 bar_info[1]가 현재 막대의 최대값이라는 것을 올바르게 이해하고 있습니까? 그리고 아무도 현재에 대해 이야기하지 않았습니다. :) 나는 방금 당신의 예를 바꿨습니다. 현재 것이 필요하면 다음이 필요합니다. 1. 어레이 시리즈의 방향을 결정합니다(0 bar - 현재 또는 첫 번째 것). 배열이 제거되면 초기화 블록에서 한 번만 수행할 수 있습니다. 함수에서 배열을 숨기면 제자리에 정의합니다. 2. 배열이 시리즈로 선언되면 현재 막대는 0이 되고 이전에 닫은 막대는 1이 됩니다. 적어도 내가 기억하는 한. [삭제] 2012.08.08 09:05 #8032 내가 뭔가를 놓쳤을 수도 있지만 현재 표시줄에서 열려면(모든 추가 사항을 고려하여) 이 작업을 수행해야 합니다. 배열이 함수로 이동되었습니다! //Function BUY_pending bool BUY_pending( string symbol, ENUM_TIMEFRAMES period, double volume, ulong magic = 0 ) { //----------------------------------------------------------------------------// //Work variables double price = 0 , sl = 0 , tp = 0 ; //Prices: Open, Sell stop, Take profit int ResCopy = - 1 ; //Result of copying the data into an array int Dig = 0 ; //Digits double bar_info[ 1 ]; bool Result = true ; //Returned importance //----------------------------------------------------------------------------// ResetLastError (); //Checking the signal to stopping the trading system if ( IsStopped ()) return ( false ); //Preparation of array ArraySetAsSeries (bar_info, true ); //Preparation of structures ZeroMemory (TradeRequest); ZeroMemory (TradeResult); ZeroMemory (CheckResult); //Copying the data into an array ResCopy = CopyHigh (symbol,period, 0 , 1 ,bar_info); if (ResCopy==- 1 ) return ( false ); //Calculations Dig = ( int ) SymbolInfoInteger (symbol, SYMBOL_DIGITS ); price = NormalizeDouble (bar_info[ 0 ] + 500 * _Point ,Dig); sl = NormalizeDouble (price - 200 * _Point ,Dig); tp = NormalizeDouble (price + 1000 * _Point ,Dig); //Preparation of request TradeRequest.type_filling = ORDER_FILLING_FOK ; TradeRequest.action = TRADE_ACTION_PENDING ; TradeRequest.type = ORDER_TYPE_BUY_STOP ; TradeRequest.deviation = 10 ; TradeRequest.symbol = symbol; TradeRequest.magic = magic; TradeRequest.volume = volume; TradeRequest.price = price; TradeRequest.sl = sl; TradeRequest.tp = tp; //Checking Result = OrderCheck (TradeRequest,CheckResult); if (!Result) //Print message for user { PrintFormat ( "retcode=%d" ,CheckResult.retcode); PrintFormat ( "%s %s at %G Ask=%G Bid=%G " , EnumToString (TradeRequest.type),symbol,TradeRequest.price, SymbolInfoDouble (symbol, SYMBOL_ASK ), SymbolInfoDouble (symbol, SYMBOL_BID )); Print ( "------------" ); } if ((!Result)||(CheckResult.retcode!= 0 )) return ( false ); //OrderSend Result = OrderSend (TradeRequest,TradeResult); //Checking for presence of the errors if ( _LastError != 0 ){Result = false ;} //----------------------------------------------------------------------------// return (Result); //----------------------------------------------------------------------------// } ilunga 2012.08.08 09:15 #8033 Interesting : 그리고 아무도 현재에 대해 이야기하지 않았습니다. :) 나는 방금 당신의 예를 바꿨습니다. 현재 것이 필요하면 다음이 필요합니다. 1. 어레이 시리즈의 방향을 결정합니다(0 bar - 현재 또는 첫 번째 것). 배열이 제거되면 초기화 블록에서 한 번만 수행할 수 있습니다. 함수에서 배열을 숨기면 제자리에 정의합니다. 2. 배열이 시리즈로 선언되면 현재 막대는 0이 되고 이전에 닫은 막대는 1이 됩니다. 적어도 내가 기억하는 한. 배열을 3개의 요소로 확장했습니다. 현재 가격 과 포함된 가격이 일치하지 않습니다. 아마도 이것이 이유일 것입니다. #include <Trade\SymbolInfo.mqh> double bar_info[ 3 ]; CSymbolInfo m_sym1; CSymbolInfo m_sym2; bool a; int OnInit () { SymbolSelect ( "EURUSD" , true ); SymbolSelect ( "GBPUSD" , true ); a = false ; return ( 0 ); } void OnTick () { if (a) return ; a = true ; int ResCopy = CopyHigh ( "EURUSD" , PERIOD_D1 , 0 , 3 ,bar_info); if (ResCopy==- 1 ) return ; Print ( "bar_info[0] = " + DoubleToString (bar_info[ 0 ])); Print ( "bar_info[1] = " + DoubleToString (bar_info[ 1 ])); Print ( "bar_info[2] = " + DoubleToString (bar_info[ 2 ])); PrintFormat ( "Ask=%G Bid=%G " , SymbolInfoDouble ( "EURUSD" , SYMBOL_ASK ), SymbolInfoDouble ( "EURUSD" , SYMBOL_BID )); } 결과(GBPUSD에서 테스트): FR 0 test3 (GBPUSD,H1) 13 : 12 : 59 2012.01 . 02 09 : 00 : 00 bar_info[ 0 ] = 1.29591000 LH 0 test3 (GBPUSD,H1) 13 : 12 : 59 2012.01 . 02 09 : 00 : 00 bar_info[ 1 ] = 1.29987000 OF 0 test3 (GBPUSD,H1) 13 : 12 : 59 2012.01 . 02 09 : 00 : 00 bar_info[ 2 ] = 1.29220000 QN 0 test3 (GBPUSD,H1) 13 : 12 : 59 2012.01 . 02 09 : 00 : 00 Ask= 1.29722 Bid= 1.29709 Ask와 Bid 모두 0의 최대값보다 크고 두 번째 막대의 최대값보다 큽니다. 테스트가 EURUSD에서 실행되면 모든 것이 정상입니다. FL 0 test3 (EURUSD,H1) 13 : 21 : 09 2012.01 . 02 09 : 00 : 00 bar_info[ 0 ] = 1.29591000 LJ 0 test3 (EURUSD,H1) 13 : 21 : 09 2012.01 . 02 09 : 00 : 00 bar_info[ 1 ] = 1.29987000 OP 0 test3 (EURUSD,H1) 13 : 21 : 09 2012.01 . 02 09 : 00 : 00 bar_info[ 2 ] = 1.29220000 CO 0 test3 (EURUSD,H1) 13 : 21 : 09 2012.01 . 02 09 : 00 : 00 Ask= 1.29241 Bid= 1.2922 "not on my"페어 테스트 중에 "바 정보가 업데이트되었지만 아직 틱이 없습니다"라는 상황이 밝혀진 것 같습니다. [삭제] 2012.08.08 09:20 #8034 ilunga : 배열을 3개의 요소로 확장했습니다. 현재 가격 과 포함된 가격이 일치하지 않습니다. 아마도 이것이 이유일 것입니다. 결과: Ask와 Bid 모두 0의 최대값보다 크고 두 번째 막대의 최대값보다 큽니다. 코드에서 배열의 직렬성을 고려하지 않습니다. 아무도 2000년에 0바가 나오지 않을 것이라는 사실을 보증할 수 없습니다. 위의 코드를 제공했는데 어레이 옵션이 있는 모든 TF에 적합합니다. 거기, 이 코드는 헛되지 않습니다. //Preparation of array ArraySetAsSeries (bar_info, true ); 막대의 고점을 결정하기 위해 일일 TF (D1) 만 필요하고 배열을 전혀 엉망으로 만들 필요가 없다면 함수의 첫 번째 부분을 다음으로 변경하십시오. //Function BUY_pending bool BUY_pending( string symbol, double volume, ulong magic = 0 ) { //----------------------------------------------------------------------------// //Work variables double price = 0 , sl = 0 , tp = 0 ; //Prices: Open, Sell stop, Take profit double High = 0 ; //The maximum value of bid for the current day int Dig = 0 ; //Digits bool Result = true ; //Returned importance //----------------------------------------------------------------------------// ResetLastError (); //Checking the signal to stopping the trading system if ( IsStopped ()) return ( false ); //Preparation of structures ZeroMemory (TradeRequest); ZeroMemory (TradeResult); ZeroMemory (CheckResult); //Calculations High = SymbolInfoDouble (symbol, SYMBOL_BIDHIGH ); Dig = ( int ) SymbolInfoInteger (symbol, SYMBOL_DIGITS ); price = NormalizeDouble (High + 500 * _Point ,Dig); sl = NormalizeDouble (price - 200 * _Point ,Dig); tp = NormalizeDouble (price + 1000 * _Point ,Dig); ilunga 2012.08.08 09:24 #8035 Interesting : 코드에서 배열의 직렬성을 고려하지 않습니다. 아무도 2000년에 0바가 나오지 않을 것이라는 사실을 보증할 수 없습니다. 위의 코드를 제공했는데 어레이 옵션이 있는 모든 TF에 적합합니다. 거기, 이 코드는 헛되지 않습니다. ArraySetAsSeries는 다음과 같은 동적 배열 에만 해당합니까? Документация по MQL5: Основы языка / Типы данных / Объект динамического массива www.mql5.com Основы языка / Типы данных / Объект динамического массива - Документация по MQL5 ilunga 2012.08.08 09:28 #8036 Interesting : 코드에서 배열의 직렬성을 고려하지 않습니다. 아무도 2000년에 0바가 나오지 않을 것이라는 사실을 보증할 수 없습니다. 위의 코드를 제공했는데 어레이 옵션이 있는 모든 TF에 적합합니다. 거기, 이 코드는 헛되지 않습니다. 좋아, 배열을 동적으로 만들자. #include <Trade\SymbolInfo.mqh> double bar_info[]; CSymbolInfo m_sym1; CSymbolInfo m_sym2; bool a; int OnInit () { ArrayResize (bar_info, 3 ); ArraySetAsSeries (bar_info,ххх); SymbolSelect ( "EURUSD" , true ); SymbolSelect ( "GBPUSD" , true ); a = false ; return ( 0 ); } void OnTick () { if (a) return ; a = true ; int ResCopy = CopyHigh ( "EURUSD" , PERIOD_D1 , 0 , 3 ,bar_info); if (ResCopy==- 1 ) return ; Print ( "bar_info[0] = " + DoubleToString (bar_info[ 0 ])); Print ( "bar_info[1] = " + DoubleToString (bar_info[ 1 ])); Print ( "bar_info[2] = " + DoubleToString (bar_info[ 2 ])); PrintFormat ( "Ask=%G Bid=%G " , SymbolInfoDouble ( "EURUSD" , SYMBOL_ASK ), SymbolInfoDouble ( "EURUSD" , SYMBOL_BID )); } xxx 대신 true와 false를 차례로 입력합니다. 결과: FF 0 test3 (GBPUSD,H1) 13 : 25 : 47 2012.01 . 02 09 : 00 : 00 bar_info[ 0 ] = 1.29220000 GL 0 test3 (GBPUSD,H1) 13 : 25 : 47 2012.01 . 02 09 : 00 : 00 bar_info[ 1 ] = 1.29987000 OJ 0 test3 (GBPUSD,H1) 13 : 25 : 47 2012.01 . 02 09 : 00 : 00 bar_info[ 2 ] = 1.29591000 FR 0 test3 (GBPUSD,H1) 13 : 25 : 47 2012.01 . 02 09 : 00 : 00 Ask= 1.29722 Bid= 1.29709 그리고 JP 0 test3 (GBPUSD,H1) 13 : 26 : 07 2012.01 . 02 09 : 00 : 00 bar_info[ 0 ] = 1.29591000 PN 0 test3 (GBPUSD,H1) 13 : 26 : 07 2012.01 . 02 09 : 00 : 00 bar_info[ 1 ] = 1.29987000 KD 0 test3 (GBPUSD,H1) 13 : 26 : 07 2012.01 . 02 09 : 00 : 00 bar_info[ 2 ] = 1.29220000 MP 0 test3 (GBPUSD,H1) 13 : 26 : 07 2012.01 . 02 09 : 00 : 00 Ask= 1.29722 Bid= 1.29709 배열의 순서는 변경되었지만 결과는 변경되지 않았습니다. 입찰가가 배열의 [0]번째 막대의 최대값보다 큽니다. [삭제] 2012.08.08 09:36 #8037 ilunga : ArraySetAsSeries는 다음과 같은 동적 배열 에만 해당합니까? 솔직히 기억이 안나네요. 하지만 위에서 제가 준 코드의 결과는 우리가 얻은 것과 일치합니다. High = SymbolInfoDouble (symbol, SYMBOL_BIDHIGH ); 예, ArraySetAsSeries 없이는 이 상황에서 잘 작동합니다. //+------------------------------------------------------------------+ //Function BUY_pending bool BUY_pending( string symbol, ENUM_TIMEFRAMES period, double volume, ulong magic = 0 ) { //----------------------------------------------------------------------------// //Work variables double price = 0 , sl = 0 , tp = 0 ; //Prices: Open, Sell stop, Take profit int ResCopy = - 1 ; //Result of copying the data into an array int Dig = 0 ; //Digits double bar_info[ 1 ]; bool Result = true ; //Returned importance //----------------------------------------------------------------------------// ResetLastError (); //Checking the signal to stopping the trading system if ( IsStopped ()) return ( false ); //Preparation of structures ZeroMemory (TradeRequest); ZeroMemory (TradeResult); ZeroMemory (CheckResult); //Copying the data into an array ResCopy = CopyHigh (symbol,period, 0 , 1 ,bar_info); if (ResCopy==- 1 ) return ( false ); //Calculations Dig = ( int ) SymbolInfoInteger (symbol, SYMBOL_DIGITS ); price = NormalizeDouble (bar_info[ 0 ] + 500 * _Point ,Dig); 추신 저것들. 현재 막대를 가져와야 하는 경우 이 행의 배열에 3개의 막대를 복사하는 것은 헛된 일입니다. //Это не правильно int ResCopy = CopyHigh ( "EURUSD" , PERIOD_D1 , 0 , 3 ,bar_info); //так правильно int ResCopy = CopyHigh ( "EURUSD" , PERIOD_D1 , 0 , 1 ,bar_info); //если PERIOD_D1 не меняется вот идеальный вариант High = SymbolInfoDouble (symbol, SYMBOL_BIDHIGH ); ilunga 2012.08.08 09:57 #8038 Interesting : 추신 저것들. 현재 막대를 가져와야 하는 경우 이 행의 배열에 3개의 막대를 복사하는 것은 헛된 일입니다. 고맙습니다! 이 옵션은 오류 없이 실행되며 이 경우에는 충분합니다. 그러나 질문은 조금 더 높게 매달려 있었습니다. 어떻게 입찰가가 최대값보다 클 수 있습니까 =( [삭제] 2012.08.08 10:20 #8039 ilunga : 그러나 질문은 조금 더 높게 매달려 있었습니다. 어떻게 입찰가가 최대값보다 클 수 있습니까 =( 먼저 이 최대값이 사용되는 기간을 결정해야 합니다. 배열이 double bar_info[n]으로 선언되면 현재 막대가 가장 큰 인덱스가 됩니다. n = 2인 경우 이 코드는 어제의 일일 막대와 함께 작동합니다. int ResCopy = CopyHigh ( "EURUSD" , PERIOD_D1 , 0 , 2 ,bar_info); price = NormalizeDouble (bar_info[ 0 ] + 500 * _Point ,Dig); 그리고 이것은 현재 것과 int ResCopy = CopyHigh ( "EURUSD" , PERIOD_D1 , 0 , 2 ,bar_info); price = NormalizeDouble (bar_info[ 1 ] + 500 * _Point ,Dig); 저것들. 귀하의 경우 여러 막대를 복사 할 때 현재 막대를 얻으려면 이와 같이 정렬해야합니다 (배열에 복사 된 막대 수에 대한 추가 확인이 필요할 수 있음) price = NormalizeDouble (bar_info[ResCopy- 1 ] + 500 * _Point ,Dig); Документация по MQL5: Доступ к таймсериям и индикаторам / Bars www.mql5.com Доступ к таймсериям и индикаторам / Bars - Документация по MQL5 ilunga 2012.08.08 10:36 #8040 Interesting : 먼저 이 최대값이 사용되는 기간을 결정해야 합니다. 배열이 double bar_info[n]으로 선언되면 현재 막대가 가장 큰 인덱스가 됩니다. 따라서 이전 페이지에는 code 가 있고 3개의 요소로 구성된 배열이 있습니다. Print로 인쇄할 때 Bid = 1.29709이고 1.29220이 bar_info[n-1]에 저장됩니다. 1...797798799800801802803804805806807808809810811...3184 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
ilunga :
추신: 내(및 귀하의) 코드에서 bar_info[1]가 현재 막대의 최대값이라는 것을 올바르게 이해하고 있습니까?
그리고 아무도 현재에 대해 이야기하지 않았습니다. :)
나는 방금 당신의 예를 바꿨습니다. 현재 것이 필요하면 다음이 필요합니다.
1. 어레이 시리즈의 방향을 결정합니다(0 bar - 현재 또는 첫 번째 것).
배열이 제거되면 초기화 블록에서 한 번만 수행할 수 있습니다. 함수에서 배열을 숨기면 제자리에 정의합니다.
2. 배열이 시리즈로 선언되면 현재 막대는 0이 되고 이전에 닫은 막대는 1이 됩니다.
적어도 내가 기억하는 한.
내가 뭔가를 놓쳤을 수도 있지만 현재 표시줄에서 열려면(모든 추가 사항을 고려하여) 이 작업을 수행해야 합니다.
배열이 함수로 이동되었습니다!
그리고 아무도 현재에 대해 이야기하지 않았습니다. :)
나는 방금 당신의 예를 바꿨습니다. 현재 것이 필요하면 다음이 필요합니다.
1. 어레이 시리즈의 방향을 결정합니다(0 bar - 현재 또는 첫 번째 것).
배열이 제거되면 초기화 블록에서 한 번만 수행할 수 있습니다. 함수에서 배열을 숨기면 제자리에 정의합니다.
2. 배열이 시리즈로 선언되면 현재 막대는 0이 되고 이전에 닫은 막대는 1이 됩니다.
적어도 내가 기억하는 한.
배열을 3개의 요소로 확장했습니다. 현재 가격 과 포함된 가격이 일치하지 않습니다. 아마도 이것이 이유일 것입니다.
결과(GBPUSD에서 테스트):
Ask와 Bid 모두 0의 최대값보다 크고 두 번째 막대의 최대값보다 큽니다.
테스트가 EURUSD에서 실행되면 모든 것이 정상입니다.
"not on my"페어 테스트 중에 "바 정보가 업데이트되었지만 아직 틱이 없습니다"라는 상황이 밝혀진 것 같습니다.
배열을 3개의 요소로 확장했습니다. 현재 가격 과 포함된 가격이 일치하지 않습니다. 아마도 이것이 이유일 것입니다.
결과:
Ask와 Bid 모두 0의 최대값보다 크고 두 번째 막대의 최대값보다 큽니다.
코드에서 배열의 직렬성을 고려하지 않습니다. 아무도 2000년에 0바가 나오지 않을 것이라는 사실을 보증할 수 없습니다.
위의 코드를 제공했는데 어레이 옵션이 있는 모든 TF에 적합합니다.
거기, 이 코드는 헛되지 않습니다.
막대의 고점을 결정하기 위해 일일 TF (D1) 만 필요하고 배열을 전혀 엉망으로 만들 필요가 없다면 함수의 첫 번째 부분을 다음으로 변경하십시오.
코드에서 배열의 직렬성을 고려하지 않습니다. 아무도 2000년에 0바가 나오지 않을 것이라는 사실을 보증할 수 없습니다.
위의 코드를 제공했는데 어레이 옵션이 있는 모든 TF에 적합합니다.
거기, 이 코드는 헛되지 않습니다.
코드에서 배열의 직렬성을 고려하지 않습니다. 아무도 2000년에 0바가 나오지 않을 것이라는 사실을 보증할 수 없습니다.
위의 코드를 제공했는데 어레이 옵션이 있는 모든 TF에 적합합니다.
거기, 이 코드는 헛되지 않습니다.
좋아, 배열을 동적으로 만들자.
xxx 대신 true와 false를 차례로 입력합니다.
결과:
그리고
배열의 순서는 변경되었지만 결과는 변경되지 않았습니다. 입찰가가 배열의 [0]번째 막대의 최대값보다 큽니다.
ArraySetAsSeries는 다음과 같은 동적 배열 에만 해당합니까?
솔직히 기억이 안나네요. 하지만 위에서 제가 준 코드의 결과는 우리가 얻은 것과 일치합니다.
예, ArraySetAsSeries 없이는 이 상황에서 잘 작동합니다.
추신
저것들. 현재 막대를 가져와야 하는 경우 이 행의 배열에 3개의 막대를 복사하는 것은 헛된 일입니다.
추신
저것들. 현재 막대를 가져와야 하는 경우 이 행의 배열에 3개의 막대를 복사하는 것은 헛된 일입니다.
고맙습니다! 이 옵션은 오류 없이 실행되며 이 경우에는 충분합니다.
그러나 질문은 조금 더 높게 매달려 있었습니다. 어떻게 입찰가가 최대값보다 클 수 있습니까 =(
ilunga :
그러나 질문은 조금 더 높게 매달려 있었습니다. 어떻게 입찰가가 최대값보다 클 수 있습니까 =(
먼저 이 최대값이 사용되는 기간을 결정해야 합니다.
배열이 double bar_info[n]으로 선언되면 현재 막대가 가장 큰 인덱스가 됩니다.
n = 2인 경우 이 코드는 어제의 일일 막대와 함께 작동합니다.
그리고 이것은 현재 것과
저것들. 귀하의 경우 여러 막대를 복사 할 때 현재 막대를 얻으려면 이와 같이 정렬해야합니다 (배열에 복사 된 막대 수에 대한 추가 확인이 필요할 수 있음)
먼저 이 최대값이 사용되는 기간을 결정해야 합니다.
배열이 double bar_info[n]으로 선언되면 현재 막대가 가장 큰 인덱스가 됩니다.