[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 값을 사용해야 하지만 그림에서 노란색 화살표로 표시된 값은 사용하지 않아야 합니다.

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