ma_shiftT = 0이고 ma_shiftD=0인 경우 첫 번째 막대에서 위치가 올바르게 열리고, ma_shiftT = -1이고 ma_shiftD=1이면 세 번째 또는 네 번째 막대에서 위치가 열립니다.
첫 번째 막대를 건널 때 위치를 열려면 어떻게 해야 합니까?
inputint ma_shiftT=- 1 ; inputint ma_shiftD= 1 ; int iTEMAHandle; // хэндл индикатора iTEMA int iDEMAHandle; // хэндл индикатора double ma1Val[]; // динамические массивы для хранения численных значений для каждого бара double maVal[]; //
ma_shiftT = 0이고 ma_shiftD=0인 경우 첫 번째 막대에서 위치가 올바르게 열리고, ma_shiftT = -1이고 ma_shiftD=1이면 세 번째 또는 네 번째 막대에서 위치가 열립니다.
첫 번째 막대에서 교차할 때 위치를 열려면 어떻게 해야 합니까?
inputint ma_shiftT=- 1 ; inputint ma_shiftD= 1 ; int iTEMAHandle; // хэндл индикатора iTEMA int iDEMAHandle; // хэндл индикатора double ma1Val[]; // динамические массивы для хранения численных значений для каждого бара double maVal[]; //
if (Sell_Condition_3 && Sell_Condition_4) { // открываю позицию SELL } }
도움이 되도록 예제를 첨부했습니다. 이 예제에서는 여러 값을 복사하지 않고 한 번에 하나씩 복사합니다. 나와 귀하의 예제가 반환하는 내용을 단계별로 비교하여 예제의 배열에서 인덱싱이 어떻게 발생하는지 확인해야 합니다(즉, 배열에서 막대 1의 요소가 저장되는 위치와 막대 2의 위치를 이해해야 함).
내 예를 사용하는 방법:
특히 예제 설정에 대해 "Two iMA Shift 빼기 shift plus.tpl"이라는 예제 이름과 일치하는 이름으로 차트 템플릿을 만들고 저장했습니다. 이 템플릿을 터미널의 \MQL5\Profiles\Templates 폴더에 저장합니다. 이제 테스터를 시작할 때 테스터는 이 템플릿을 선택하고 테스터에 아름다운 그림이 있을 것입니다.
안녕하세요.
도와주세요.
표시선 이 첫 번째 막대에서 교차할 때 신호를 보냅니다.
ma_shiftT = 0이고 ma_shiftD=0인 경우 첫 번째 막대에서 위치가 올바르게 열리고, ma_shiftT = -1이고 ma_shiftD=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)
두 번째 막대와 첫 번째 막대의 선 위치를 비교해야만 교차 사실을 알 수 있습니다. 이 문제에 대해.
배열 인덱싱의 방향을 고려해야 합니다. 그러면 밝혀질 것이다
조건이 충족되면 교차 사실이 분명합니다. 교차로의 방향은 당신에게 달려 있습니다.
추신; 아, 글쎄요... 교집합의 정의를 부주의하게 봤습니다. 글쎄, 어쨌든 추가 값은 필요하지 않습니다. 그들은 당신을 혼란에 빠뜨렸을 것입니다.
안녕하세요.
도와주세요.
표시선 이 첫 번째 막대에서 교차할 때 신호를 보냅니다.
ma_shiftT = 0이고 ma_shiftD=0인 경우 첫 번째 막대에서 위치가 올바르게 열리고, ma_shiftT = -1이고 ma_shiftD=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가 하락합니까, 아니면 둘 다 서로 다른 방향으로 대칭적으로 떨어져 있습니까?
안녕하세요!
FOREX의 스프레드에 대해 질문이 있습니다.
스프레드가 확대되면 ASK가 상승합니까, BID가 하락합니까, 아니면 둘 다 서로 다른 방향으로 대칭적으로 떨어져 있습니까?
무엇이든 될 수 있습니다. 한 가지 변경되지 않은 것이 있습니다. 스프레드는 매도호가와 매수호가의 차이입니다.
스프레드가 좁혀지기 시작하면 동시에 서로를 향해 이동할 수 있다는 것을 올바르게 이해했습니까?
" 한 가지는 동일하게 유지됩니다. 스프레드는 매도호가와 매수호가의 차이입니다."
다른 법은 없습니다.
" 한 가지는 동일하게 유지됩니다. 스프레드는 매도호가와 매수호가의 차이입니다."
다른 법은 없습니다.
예를 들어 매수가 있고 스프레드가 확대되기 시작하고 매도가 상승하고 매수가가 하락한 경우 포지션 을 청산해야 합니까 아니면 매도가 하락할 때까지 기다려야 합니까?
매수(BUY 포지션)는 Bid 가격으로 마감됩니다.
또 다른 점은 "매우 높은 변동성 기간 동안 무엇을 해야 합니까?"라는 질문을 할 가능성이 있다는 것입니다. 나는 대답합니다-모두가 자신의 방식으로 결정합니다.
매수(BUY 포지션)는 Bid 가격으로 마감됩니다.
또 다른 점은 "매우 높은 변동성 기간 동안 무엇을 해야 합니까?"라는 질문을 할 가능성이 있다는 것입니다. 나는 대답합니다-모두가 자신의 방식으로 결정합니다.
매수(BUY 포지션)는 Bid 가격으로 마감됩니다.
또 다른 점은 "매우 높은 변동성 기간 동안 무엇을 해야 합니까?"라는 질문을 할 가능성이 있다는 것입니다. 나는 대답합니다-모두가 자신의 방식으로 결정합니다.