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

 
sile :

안녕하세요.

도와주세요.

표시선 이 첫 번째 막대에서 교차할 때 신호를 보냅니다.

ma_shiftT = 0이고 ma_shiftD=0인 경우 첫 번째 막대에서 위치가 올바르게 열리고, ma_shiftT = -1이고 ma_shiftD=1이면 세 번째 또는 네 번째 막대에서 위치가 열립니다.

첫 번째 막대를 건널 때 위치를 열려면 어떻게 해야 합니까?


input int       ma_shiftT=- 1 ;
input int       ma_shiftD= 1 ;
int iTEMAHandle;   // хэндл индикатора iTEMA
int iDEMAHandle;     // хэндл индикатора
double ma1Val[]; // динамические массивы для хранения численных значений  для каждого бара
double maVal[];   // 

//+------------------------------------------------------------------+
int OnInit ()
  {
//---
m_symbol.Name( Symbol ());  
//--- Получить хэндл индикатора iTEMA
iTEMAHandle= iTEMA ( _Symbol , PERIOD_CURRENT , 30 ,ma_shiftT, PRICE_CLOSE );;
//---Получить хэндл индикатора
iDEMAHandle= iDEMA ( _Symbol , PERIOD_CURRENT , 30 ,ma_shiftD, PRICE_CLOSE );;
  
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- освобождаем хэндлы индикаторов
   IndicatorRelease (iTEMAHandle);

   IndicatorRelease (iDEMAHandle);
   }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
  
   //--- массив значений индикатора
   ArraySetAsSeries (ma1Val, true );

//--- массив значений индикатора
   ArraySetAsSeries (maVal, true );
  
   if ( CopyRates ( _Symbol , _Period , 0 , 5 ,mrate)< 0 )
     {
       Alert ( "Ошибка копирования исторических данных - ошибка:" , GetLastError (), "!!" );
       return ;
     }
//====
   if ( CopyBuffer (iTEMAHandle, 0 , 0 , 5 ,ma1Val)< 0 )
     {
       Alert ( "Ошибка копирования буферов индикатора TEMA - номер ошибки:" , GetLastError (), "!!" );
       return ;
     }
   if ( CopyBuffer (iDEMAHandle, 0 , 0 , 5 ,maVal)< 0 )
     {
       Alert ( "Ошибка копирования буферов индикатора DEMA - номер ошибки:" , GetLastError ());
       return ;
     }

   bool Sell_Condition_3=(maVal[ 2 ]<=ma1Val[ 2 ]);
   bool Sell_Condition_4=(maVal[ 1 ]>ma1Val[ 1 ]);
  
   if (Sell_Condition_3 && Sell_Condition_4)
   {
   // открываю позицию SELL
   }
  }

첫째: 하나만 사용하는 경우 5개의 지표 값을 복사하는 이유는 무엇입니까?

둘째: 표시선의 위치는 교차점을 나타내지 않습니다.

첫 번째 값부터 시작하여 2개의 값을 복사하면 충분합니다.

CopyBuffer (iTEMAHandle, 0 , 1 , 2 , ma1Val)

CopyBuffer (iDEMAHandle, 0 , 1 , 2 , maVal)

두 번째 막대와 첫 번째 막대의 선 위치를 비교해야만 교차 사실을 알 수 있습니다. 이 문제에 대해.

배열 인덱싱의 방향을 고려해야 합니다. 그러면 밝혀질 것이다

if (maVal[ 0 ] <= ma1Val[ 0 ] && maVal[ 1 ] > ma1Val[ 1 ])

조건이 충족되면 교차 사실이 분명합니다. 교차로의 방향은 당신에게 달려 있습니다.


추신; 아, 글쎄요... 교집합의 정의를 부주의하게 봤습니다. 글쎄, 어쨌든 추가 값은 필요하지 않습니다. 그들은 당신을 혼란에 빠뜨렸을 것입니다.

 
sile :

안녕하세요.

도와주세요.

표시선 이 첫 번째 막대에서 교차할 때 신호를 보냅니다.

ma_shiftT = 0이고 ma_shiftD=0인 경우 첫 번째 막대에서 위치가 올바르게 열리고, ma_shiftT = -1이고 ma_shiftD=1이면 세 번째 또는 네 번째 막대에서 위치가 열립니다.

첫 번째 막대에서 교차할 때 위치를 열려면 어떻게 해야 합니까?


input int       ma_shiftT=- 1 ;
input int       ma_shiftD= 1 ;
int iTEMAHandle;   // хэндл индикатора iTEMA
int iDEMAHandle;     // хэндл индикатора
double ma1Val[]; // динамические массивы для хранения численных значений  для каждого бара
double maVal[];   // 

//+------------------------------------------------------------------+
int OnInit ()
  {
//---
m_symbol.Name( Symbol ());  
//--- Получить хэндл индикатора iTEMA
iTEMAHandle= iTEMA ( _Symbol , PERIOD_CURRENT , 30 ,ma_shiftT, PRICE_CLOSE );;
//---Получить хэндл индикатора
iDEMAHandle= iDEMA ( _Symbol , PERIOD_CURRENT , 30 ,ma_shiftD, PRICE_CLOSE );;
  
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- освобождаем хэндлы индикаторов
   IndicatorRelease (iTEMAHandle);

   IndicatorRelease (iDEMAHandle);
   }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
  
   //--- массив значений индикатора
   ArraySetAsSeries (ma1Val, true );

//--- массив значений индикатора
   ArraySetAsSeries (maVal, true );
  
   if ( CopyRates ( _Symbol , _Period , 0 , 5 ,mrate)< 0 )
     {
       Alert ( "Ошибка копирования исторических данных - ошибка:" , GetLastError (), "!!" );
       return ;
     }
//====
   if ( CopyBuffer (iTEMAHandle, 0 , 0 , 5 ,ma1Val)< 0 )
     {
       Alert ( "Ошибка копирования буферов индикатора TEMA - номер ошибки:" , GetLastError (), "!!" );
       return ;
     }
   if ( CopyBuffer (iDEMAHandle, 0 , 0 , 5 ,maVal)< 0 )
     {
       Alert ( "Ошибка копирования буферов индикатора DEMA - номер ошибки:" , GetLastError ());
       return ;
     }

   bool Sell_Condition_3=(maVal[ 2 ]<=ma1Val[ 2 ]);
   bool Sell_Condition_4=(maVal[ 1 ]>ma1Val[ 1 ]);
  
   if (Sell_Condition_3 && Sell_Condition_4)
   {
   // открываю позицию SELL
   }
  }

도움이 되도록 예제를 첨부했습니다. 이 예제에서는 여러 값을 복사하지 않고 한 번에 하나씩 복사합니다. 나와 귀하의 예제가 반환하는 내용을 단계별로 비교하여 예제의 배열에서 인덱싱이 어떻게 발생하는지 확인해야 합니다(즉, 배열에서 막대 1의 요소가 저장되는 위치와 막대 2의 위치를 이해해야 함).

내 예를 사용하는 방법:

특히 예제 설정에 대해 "Two iMA Shift 빼기 shift plus.tpl"이라는 예제 이름과 일치하는 이름으로 차트 템플릿을 만들고 저장했습니다. 이 템플릿을 터미널의 \MQL5\Profiles\Templates 폴더에 저장합니다. 이제 테스터를 시작할 때 테스터는 이 템플릿을 선택하고 테스터에 아름다운 그림이 있을 것입니다.

이름없는

교차로가 감지되면 테스터는 지시문에서 멈춥니다.

//---
   if (ma_one_1<ma_two_1 && ma_one_2>ma_two_2)
     {
       string text= "ma_one_1 = " + DoubleToString (ma_one_1, Digits ()+ 1 )+ "\n" +
                   "ma_two_1 = " + DoubleToString (ma_two_1, Digits ()+ 1 )+ "\n" +
                   "ma_one_2 = " + DoubleToString (ma_one_2, Digits ()+ 1 )+ "\n" +
                   "ma_two_2 = " + DoubleToString (ma_two_2, Digits ()+ 1 );
       Comment (text);
       DebugBreak ();
     }

테스터에서 "십자형"을 사용하여 막대를 스크롤하고 막대 1과 막대 2의 표시기 값을 볼 수 있습니다(먼저 "데이터 창" 창을 켭니다).

 

안녕하세요!

FOREX의 스프레드에 대해 질문이 있습니다.

스프레드가 확대되면 ASK가 상승합니까, BID가 하락합니까, 아니면 둘 다 서로 다른 방향으로 대칭적으로 떨어져 있습니까?

 
Sergey Zhukov :

안녕하세요!

FOREX의 스프레드에 대해 질문이 있습니다.

스프레드가 확대되면 ASK가 상승합니까, BID가 하락합니까, 아니면 둘 다 서로 다른 방향으로 대칭적으로 떨어져 있습니까?

무엇이든 될 수 있습니다. 한 가지 변경되지 않은 것이 있습니다. 스프레드는 매도호가와 매수호가의 차이입니다.
 
Vladimir Karputov :
무엇이든 될 수 있습니다. 한 가지 변경되지 않은 것이 있습니다. 스프레드는 매도호가와 매수호가의 차이입니다.
스프레드가 좁혀지기 시작하면 동시에 서로를 향해 이동할 수 있다는 것을 올바르게 이해했습니까?
 
Sergey Zhukov :
스프레드가 좁혀지기 시작하면 동시에 서로를 향해 이동할 수 있다는 것을 올바르게 이해했습니까?

" 한 가지는 동일하게 유지됩니다. 스프레드는 매도호가와 매수호가의 차이입니다."

다른 법은 없습니다.

 
Vladimir Karputov :

" 한 가지는 동일하게 유지됩니다. 스프레드는 매도호가와 매수호가의 차이입니다."

다른 법은 없습니다.

예를 들어 매수가 있고 스프레드가 확대되기 시작하고 매도가 상승하고 매수가가 하락한 경우 포지션 을 청산해야 합니까 아니면 매도가 하락할 때까지 기다려야 합니까?
 
Sergey Zhukov :
예를 들어 매수가 있고 스프레드가 확대되기 시작하고 매도가 상승하고 매수가가 하락한 경우 포지션 을 청산해야 합니까 아니면 매도가 하락할 때까지 기다려야 합니까?

매수(BUY 포지션)는 Bid 가격으로 마감됩니다.

또 다른 점은 "매우 높은 변동성 기간 동안 무엇을 해야 합니까?"라는 질문을 할 가능성이 있다는 것입니다. 나는 대답합니다-모두가 자신의 방식으로 결정합니다.

 
Vladimir Karputov :

매수(BUY 포지션)는 Bid 가격으로 마감됩니다.

또 다른 점은 "매우 높은 변동성 기간 동안 무엇을 해야 합니까?"라는 질문을 할 가능성이 있다는 것입니다. 나는 대답합니다-모두가 자신의 방식으로 결정합니다.

예, 정확히는 매우 높은 변동성을 의미했습니다. 포럼을 검색해 보겠습니다. 감사합니다.
 
Vladimir Karputov :

매수(BUY 포지션)는 Bid 가격으로 마감됩니다.

또 다른 점은 "매우 높은 변동성 기간 동안 무엇을 해야 합니까?"라는 질문을 할 가능성이 있다는 것입니다. 나는 대답합니다-모두가 자신의 방식으로 결정합니다.

네, 정말... 그런 브로커는 어디에서 찾을 수 있나요... 링크를 공유할 수 있습니까?
사유: