[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 5. - 페이지 132

 
Roman. :

IMHO, 어렵지는 않지만 "지시"하거나 보내기가 매우 간단합니다.

물론 "보내기"가 더 쉽습니다. 제안보다 "보내기". 그러나 사실 나는 교과서에 나를 찌르려고 아무 것도 요구하지 않았다. 한 곳에 진실의 복제품을 썼지만 본질은 변하지 않는다.

아트미디어70 :

음, 마지막으로 정확히 무엇을 하고 싶은지 말씀해 주세요... 예를 들어: Mashka 등이 올라가고 있고 Mashka 보다는 높고 가격이 있는 동안 Mashka 등이 위/아래, 그리고 이 모든 것이 사실이면 이런저런 거리에서 이런저런 지연을 설정합니다. 예제 알고리즘을 알려 드리겠습니다. 그런 다음 컨텍스트에서 가져온 코드 조각에서 올바른 방향으로 안내하기가 어렵습니다. 근데 문제는 뭔가 5학년(과장)



여기에 코드의 테스트 버전을 첨부하고 내 게시물에도 게시합니다.

//+-----------------------------------------------------------------------------------+
//|                                                                       test_Ma.mq4 |
//|                                                                               hoz |
//|                                                                                   |
//+-----------------------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

extern string ___H0 = " ___________ Параметры МА ____________ ";
extern int i_TF = 0,
           i_fastMaPeriod = 10,
           i_slowMaPeriod = 21;
extern string ___H1 = " _____ Параметры ордера _______";
extern int i_magic = 3333021;
extern double i_thresholdFromMa = 5;                           // Отступ от МА
// Машечки
double fastMa,
       slowMa;
double pt;
// Переменные рыночного окружения
double g_spread,
       g_stopLevel,
       g_tickSize;
// Идентификаторы положений машек
#define MA_DIRECT_TO_UP      0                                 // Машки направлены вверх
#define MA_DIRECT_TO_DOWN    1                                 // Машки направлены вниз
#define MA_DIRECT_TO_NONE   -1                                 // Машки во флете
#define SIGNAL_BUY           0                                 // Сигнал на покупку
#define SIGNAL_SELL          1                                 // Сигнал на продажу
#define SIGNAL_NO           -1                                 // Сигнала нет

//+-------------------------------------------------------------------------------------+
//| Функция иницилизации                                                                |
//+-------------------------------------------------------------------------------------+
int init()
{
   GetMarketInfo();
   
   if (Digits  == 2 || Digits == 4)
       pt = Point;
   if (Digits == 1 || Digits == 3 || Digits == 5)
       pt = Point * 10;
   if (Digits == 6)
       pt = Point * 100;
   if (Digits == 7)
       pt = Point * 1000;
   

  return (0);
}
//+-------------------------------------------------------------------------------------+
//| Функция деиницилизации                                                              |
//+-------------------------------------------------------------------------------------+
int deinit()
{
//----
   
//----
  return (0);
}
//+-------------------------------------------------------------------------------------+
//| Сбор рыночных данных                                                                |
//+-------------------------------------------------------------------------------------+
void GetMarketInfo()
{
  g_spread = MarketInfo(Symbol(),MODE_SPREAD);
  g_stopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
  g_tickSize = MarketInfo(Symbol(),MODE_TICKSIZE);
}
//+-------------------------------------------------------------------------------------+
//| Функция нормализации                                                                |
//+-------------------------------------------------------------------------------------+
double ND(double A)
{
  return (NormalizeDouble(A, Digits));
}
//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy(double fastMa, double slowMa)
{
   int ticket = -1;
   
   if ((fastMa + i_thresholdFromMa * pt) > Ask)           // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником

       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
   
   if (ticket > 0)
 
   return (true);
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell(double fastMa, double slowMa)
{
   int ticket = -1;
   
   if ((fastMa - i_thresholdFromMa * pt) < Bid)           // Проверка что цена открытия ниже Bid, т.к. у нас вход отложенником
   
       ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(fastMa - i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
       
   if (ticket > 0)
    
   return (true);
}
//+-------------------------------------------------------------------------------------+
//| Получаем относительное положение машек                                              |
//+-------------------------------------------------------------------------------------+
int GetStateMa(double fastMa, double slowMa)
{
   if (fastMa > slowMa)                          // Если условия выполнены, то..
       return (MA_DIRECT_TO_UP);                 // ..машки направлены вниз
   
   if (fastMa < slowMa)                          // Если условия выполнены, то..
       return (MA_DIRECT_TO_DOWN);               // машки направлены вверх
   
   return (MA_DIRECT_TO_NONE);                   // Машки не имеют выраженного направления
}
//+-------------------------------------------------------------------------------------+
//| Открытие позиций                                                                    |
//+-------------------------------------------------------------------------------------+
bool Trade(int signal)
{
   if (signal == SIGNAL_BUY)                     // Если сигнал на покупку..
       if (!OpenBuy(fastMa, slowMa))             // ..покупаем
          return(false);
   
   if (signal == SIGNAL_SELL)                   // Если сигнал на продажу..
       if (!OpenSell(fastMa, slowMa))           // ..продаём
          return(false);
       
   return (true);
}
//+-------------------------------------------------------------------------------------+
//| Получаем общий сигнал на открытие позиции                                           |
//+-------------------------------------------------------------------------------------+
int GetSignal()
{
   if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_UP)       // Если машки указывают вверх..
       if ( MathAbs(Ask - fastMa) <= i_thresholdFromMa * pt ) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa..
           return(SIGNAL_BUY);                       // ..функция возвращает сигнал покупки

   if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_DOWN)      // Если машки указывают вниз..
       if ( MathAbs(Bid - fastMa) <= i_thresholdFromMa * pt ) // ..зазор между ценой продажи и машки, <= i_thresholdFromMa..
       return(SIGNAL_SELL);                          // ..функция возвращает сигнал продажи
   
   return (SIGNAL_NO);
}
//+-------------------------------------------------------------------------------------+
//| Функция start                                                                       |
//+-------------------------------------------------------------------------------------+
int start()
{
   fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_CLOSE,1);
   slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_CLOSE,1);

// Отслеживание открытия нового бара
   static datetime lastBarTime = 0;    // Время проведения последних рассчётов
   
   if (lastBarTime == iTime(NULL, 0, 0))         // На текущем баре все необходимые действия..
       return (0);                      // ..уже были выполнены

// Рассчёт сигнала   
   int signal = GetSignal();
   
// Проведение торговых операций
   if (signal != SIGNAL_NO)
       if (!Trade(signal))
           return (0);
   
   lastBarTime = iTime(NULL, 0, 0);              // На текущем баре все необходимые действия..
                                       // .. успешно выполнены
  return (0);
}

조건은 보류 가격이 MA 값보다 높(아래) + MA에서 들여쓰기(-)한다는 것을 분명히 나타냅니다.

여기있어:

 if ( MathAbs (Ask - fastMa) <= i_thresholdFromMa * pt )

신호는 가격이 MA "갭" 영역 +(-) 오프셋에 도달할 때만 계산되어야 합니다.

예를 들어 구매 기능에서:

ticket = OrderSend ( Symbol (), OP_BUYSTOP, 0.1 , ND(fastMa + i_thresholdFromMa * pt), 3 , 0 , 0 , NULL , i_magic, 0 );

구매는 i_thresholdFromMa * pt 만큼 fastMa 이상이어야 합니다.

사실, 그녀는 거기에 없습니다. 언어의 잼이나 차의 문제. 내가 필요한 것을 다른 방법으로 설명할 수 있습니까? 추가 조건과 기능 없이 전체 코드를 제공했습니다(하나의 신호만 노출되고 열림) .
 

모든 것이 이미 명확하게 작성되었습니다 ( 테스터를 위해 실제 확인을하지 않았습니다! )

열리는 방법은 다음과 같습니다.

그곳은 열리지 않습니다.

아트미디어70 :


강조 표시된 것과 관련하여 : 시작 가격으로 작업하면 0 막대에서 MA를 다시 그리지 않습니다.

특히 1마디에 대한 조건을 만들어 오해가 없도록 했다. 가장 중요한 것은 시작하는 방법입니다 ...
파일:
test_ma.mq4  8 kb
 
예를 들어 표시기에서 각 시간의 네 번째 5분과 같은 시작 플래그를 정의해야 합니다.
 if ( Minute()== 15 )
 아무것도 건너뛰지 않습니다. 올바른 방향으로 누르십시오.
 

그런 질문이 있습니다. 거래 기준을 공식화할 때 오른쪽으로 이동하는 이동 평균 을 사용하면 이동 값이 양수입니다.

그런 다음 신호를 생성할 때 0 또는 첫 번째 막대가 아니라 이동 값에 해당하는 인덱스가 있는 막대에서 이동 평균 값을 사용해야 합니다. 맞다고 생각하지 않는다.

 
Operr :
예를 들어 표시기에서 각 시간의 네 번째 5분과 같은 시작 플래그를 정의해야 합니다.


 if ( Minute()== 15 ) // так будет работать в течении 1 минуты (от 15 до 16)
if ( Minute()>= 15 ) // так от 15 минут и до конца текущего часа
 
Tincup :

그런 질문이 있습니다. 거래 기준을 공식화할 때 오른쪽으로 이동하는 이동 평균을 사용하면 이동 값이 양수입니다.

그런 다음 신호를 생성할 때 0 또는 첫 번째 막대가 아니라 이동 값에 해당하는 인덱스가 있는 막대에서 이동 평균 값을 사용해야 합니다. 맞다고 생각하지 않는다.


차트에 평균을 던지고 필요한 인덱스를 확인하십시오. 여기에서 시각적으로 볼 수 있습니다.
 
hoz :

물론 "보내기"가 더 쉽습니다. 제안보다 "보내기". 그러나 사실 나는 교과서에 나를 찌르려고 아무 것도 요구하지 않았다. 진실의 복제품을 한 곳에 썼지만 본질은 변하지 않는다.

여기에 코드의 테스트 버전을 첨부하고 내 게시물에도 게시합니다.

조건은 보류 가격이 MA 값보다 높(아래) + MA에서 들여쓰기(-)한다는 것을 분명히 나타냅니다.

여기있어:

신호는 가격이 MA "갭" 영역 +(-) 오프셋에 도달할 때만 계산되어야 합니다.

예를 들어 구매 기능에서:

구매는 i_thresholdFromMa * pt 만큼 fastMa 이상이어야 합니다.

사실, 그녀는 거기에 없습니다. 언어의 잼이나 차의 문제. 내가 필요한 것을 다른 방법으로 설명할 수 있습니까? 추가 조건과 기능 없이 전체 코드를 제공했습니다(하나의 신호만 노출되고 열림) .
 

모든 것이 이미 명확하게 작성되었습니다 ( 테스터를 위해 실제 확인을하지 않았습니다! )

열리는 방법은 다음과 같습니다.

특히 1마디에 대한 조건을 만들어 오해가 없도록 했다. 가장 중요한 것은 시작하는 방법입니다 ...
다시 한 번 묻습니다. 정확히 언제 주문하시겠습니까? 코드로 대답 하지 말고 (이해하고 싶지 않음 - 구문 분석할 자체 코드가 많이 있음) 단순히 단어 로 대답하십시오.

예를 들면: 나는 ... tyry-pyry-yo-my ...를 전제로 그러한 거리에서 Mashka 위/아래 지연을 설정하고 싶습니다.

두 번째로 설명을 부탁하는데, 정말 어려운가요? 이미 문제를 해결했습니다.

 
그리고 한 가지 더: fastMA와 slowMA가 전역으로 정의되어 있다면 왜 그것들을 함수에 전달합니까? 모든 함수는 호출된 함수 에 매개변수를 전달하지 않고 어쨌든 이를 봅니다.
[삭제]  

안녕하세요.

Expert Advisors의 공백을 처리하는 방법을 알려주십시오.

주말을 통한 전환 기간 동안 종종 공백이 있으며, 발생한 후에는 주문 동결 작업, 해결 방법, 미리 감사드립니다!

 

Artyom, MathMax 또는 if와 함께 표현식이 더 빨리 작동할 것이라고 생각하십니까?

 double dist = MathMax ( MathMax ( NormalizeDouble (Dist* Point , Digits ),spread), MathMax (StopLevel,FreezeLevel)); //это?
// или это?
double dist = NormalizeDouble (Dist* Point , Digits );
if (dist < spread) dist = spread;
if (dist < StopLevel) dist = StopLevel;
if (dist < FreezeLevel) dist = FreezeLevel;


말로 설명하지 않았기 때문에 이 표현은 실수를 피하는 데 도움이 되고 130 나에게 도움이 된다는 것이 분명합니다!

미리 감사드립니다!

 
hoz :

차트에 평균을 던지고 필요한 인덱스를 확인하십시오. 여기에서 시각적으로 볼 수 있습니다.

던졌다. 답변이 명확하지 않아 다시 질문하겠습니다. 거래 조건을 공식화 할 때 필요하다는 것을 올바르게 이해했습니다.

다시 막대의 해당 수에 대해 MA 값을 사용해야 하지만 그림에서 노란색 화살표로 표시된 값은 사용하지 않아야 합니다.

나는 당신의 대답을 이해했기 때문에 그림을 그렸습니다.