OrderSend() 함수에 버그가 있습니까? - 페이지 9

 
borilunad :
따라서 바에 대한 마카의 정확한 비율을 설정할 필요는 없습니다. 마스카라는 마스카라로만 생각할 수 있으며 신호가 아닌 필터로 사용하는 것이 좋습니다.

보리스 , 당신이 부분적으로 옳습니다. 기본적으로 마우스는 포인터입니다. 다시 말하지만, 몇 가지 옵션이 있습니다. 누군가는 역추세에 진입할 곳을 찾고 있고 누군가는 추세를 따르고 있습니다. 많은 변형이 있지만 아직 제대로 작동하지 않았습니다 :(
 
hoz :

보리스 , 당신이 부분적으로 옳습니다. 기본적으로 마우스는 포인터입니다. 다시 말하지만, 몇 가지 옵션이 있습니다. 누군가는 역추세에 진입할 곳을 찾고 있고 누군가는 추세를 따르고 있습니다. 많은 변형이 있지만 아직 제대로 작동하지 않았습니다 :(
다른 사람을 위해 슬퍼하지 마십시오! 당신의 것을 찾으면 찾을 수 있을 것입니다! 지표에 희망이 없다고 말하는 사람들은 가격을 따라가지 못하기 때문에 옳다. 시장에 진입해야 하며, 그 추세는 최소한 덜 위험합니다. 그리고 가장 중요한 것은 가능한 이익과 최적의 폐쇄에 대한 위치를 유지하는 것입니다. :)
 

예, 본질은 슬픔에 있지 않고 다른 사람에게도 없습니다. 결론은 버그가 있고 지원이 전혀 응답하지 않는다는 것입니다! 그들은 정말로 고객에 대해 관심을 가지고 있습니까? 이것은 나에게 매우 흥미 롭습니다. 주문이 거의 일주일째 걸려있고, 반응이 전혀 없네요... 현시점에서 가격이 어떻게 나가고 있는지, 타르가 획을 긋고 있는데 연기가 없는지 한번 보시겠어요? 예, 나는 이 순간에 매달렸지만 이유를 이해하려는 유일한 의도였습니다. 월요일부터 나는 그것을 데모용으로 테스트할 것이지만 ... 다시 .. 테스터가 완전히 버그가 있다면 그때 무엇이 필요합니까?

 
hoz :

... 당신은 비디오를 찍고 가격이 현재 막대에서 어떻게 진행되는지 보여줄 수 있습니다. 타르는 대시를 통해 자릅니다 ...

나는 Masha와 이것을 가지고 있지 않았다.
 
tara :
나는 Masha와 이것을 가지고 있지 않았다.


무슨 마샤와?

나는 구체적으로 어떤 경우에 썼습니다. 그렇다면 왜 자신에게 이전합니까? 분기는 이미 9페이지 길이이며 "여전히 존재합니다."

코드를 첨부합니다. 볼 동일한 코드는 다음과 같습니다.

//+-----------------------------------------------------------------------------------+
//|                                                                       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;                           // Отступ от МА
extern double buyHear = 10,                                    // Расстояние от МА до отложки на бай
              SellHear = 10;                                   // Расстояние от МА до отложки на шорт
// Машечки
double fastMa,
       slowMa;
double pt;
datetime lastBarTime;                                          // Время проведения последних рассчётов
// Переменные рыночного окружения
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();
   
   lastBarTime = 0;
   
   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) * pt;
  g_stopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL) * pt;
  g_tickSize = MarketInfo(Symbol(),MODE_TICKSIZE) * pt;
}
//+-------------------------------------------------------------------------------------+
//| Функция нормализации                                                                |
//+-------------------------------------------------------------------------------------+
double ND(double A)
{
  return (NormalizeDouble(A, Digits));
}
//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
   int ticket = -1;
   double OOP = fastMa + buyHear * pt;             // Получаем значение цны открытия
   
   if ((ND(OOP) - Ask) >= MathMax(g_stopLevel,g_spread))             // Проверка цену открытия на стоплевел          
   {
       if (ND(OOP) > Ask)           // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником
       {
           Print("Bid = ", Bid);
           Print("Ask = ", Ask);
           Print("fastMa = ", fastMa);
           Print("Цена покупки = ", fastMa + buyHear * pt);
           Print("i_thresholdFromMa * pt = ", i_thresholdFromMa * pt);
           ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0);
       }
   }
   if (ticket > 0)
   {
       return (true);
   }
   else
    
   Alert (GetLastError());
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell()
{
   int ticket = -1;
   double OOP = fastMa - SellHear * pt;               // Получаем значение цны открытия
   
   if ((Bid - ND(OOP)) >= MathMax(g_stopLevel,g_spread))                // Проверка цену открытия на стоплевел
   {
       if (ND(OOP) < Bid)           // Проверка что цена открытия ниже Bid, т.к. у нас вход отложенником
       {
           Print("Bid = ", Bid);
           Print("Ask = ", Ask);
           Print("fastMa = ", fastMa);
           Print("fastMa + i_thresholdFromMa * pt = ", fastMa + i_thresholdFromMa * pt);
           Print("Цена покупки = ", fastMa + buyHear * pt);
           Print("i_thresholdFromMa * pt = ", i_thresholdFromMa * pt);
           ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0);
       }
   }
   if (ticket > 0)
   {
       return (true);
   }
   else
    
   Alert (GetLastError());
}
//+-------------------------------------------------------------------------------------+
//| Получаем относительное положение машек                                              |
//+-------------------------------------------------------------------------------------+
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())             // ..покупаем
          return(false);
   
   if (signal == SIGNAL_SELL)                   // Если сигнал на продажу..
       if (!OpenSell())           // ..продаём
          return(false);
       
   return (true);
}
//+-------------------------------------------------------------------------------------+
//| Получаем общий сигнал на открытие позиции                                           |
//+-------------------------------------------------------------------------------------+
int GetSignal()
{
 //  if (FindOrders() > 0)                                 // Если есть открытые ордера, то..
   //    return (SIGNAL_NO);                               //..ничего не делаем
   
   if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_UP)
       if ( ND(MathAbs(fastMa - Ask)) <= i_thresholdFromMa * pt) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa..
          return(SIGNAL_BUY);
   if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_DOWN)
       if ( ND(MathAbs(fastMa - Bid)) <= 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_OPEN,0);
   slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_OPEN,0);
   
 /*  Print("Bid = ", Bid);
   Print("Ask = ", Ask);
   Print("fastMa = ", fastMa);
   Print("i_thresholdFromMa * pt = ", i_thresholdFromMa * pt);
   */
// Отслеживание открытия нового бара
   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);
}

일부 바는 아무 이유 없이 무시됩니다. 그리고 물론, 예금은 그들에게 배치되지 않습니다. 코드가 맞습니다. 내가 볼 수있는 한 고칠 것이 없습니다.

다음은 포지션이 열리지 않은 곳을 보여주는 스크린샷입니다. 시험 날짜도 거기에서 볼 수 있습니다. 이유를 찾도록 도와주세요. 그런 다음 모든 것이 이미 지점에서 논의되었지만 원래 질문은 아닙니다.

하나

2

삼

파일:
test_ma_4.mq4  10 kb
 
pako :
TOR를 다시 공식화하는 것이 어렵지 않다면 왜 새로운 막대의 제어가 필요합니까?



쉽게 공식화 할게요! 나는 한 가지 더 생각하지 않았지만, 나는 그 본질을 전체적으로 말할 것입니다.

주문 수 에 대한 제한이 전혀 없었을 필요가 있습니다. 저것들. 주문은 수량에 관계없이 열 수 있습니다... 얼마나 많은 주문이 있더라도 현재 표시줄에서는 1개의 주문만 열어야 합니다. 그게 다야

저것들. 새 막대가 열렸습니다. 즉, 이 막대에서 1개의 주문을 열 수 있지만 현재 막대에서는 1개 이하의 주문을 열 수 있습니다. 다음 주문은 다음 바에서만 열 수 있으며 이전에는 열 수 없습니다..

이제 명확합니까?

그리고 여기서 당신은 틀렸습니다 ...

 //+-------------------------------------------------------------------------------------+
//| Функция start                                                                       |
//+-------------------------------------------------------------------------------------+
int start()
{
   fastMa = iMA ( NULL ,i_TF,i_fastMaPeriod, 0 , MODE_EMA ,MODE_OPEN, 0 ); <---------------- fastMa == slowMa 
   slowMa = iMA ( NULL ,i_TF,i_slowMaPeriod, 0 , MODE_EMA ,MODE_OPEN, 0 );  <--------------  fastMa == slowMa

   

틱 주기가 다릅니다... i_fastMaPeriod와 i_slowMaPeriod는 각각 10과 21입니다!

 

추천 읽을거리

https://www.mql5.com/ru/articles/1411

 
hoz :


쉽게 공식화 할게요! 나는 한 가지 더 생각하지 않았지만, 나는 그 본질을 전체적으로 말할 것입니다.

주문 수에 대한 제한이 전혀 없었을 필요가 있습니다. 저것들. 주문은 수량에 관계없이 열 수 있습니다... 얼마나 많은 주문이 있더라도 현재 표시줄에서는 1개의 주문만 열어야 합니다. 그게 다야

저것들. 새 막대가 열렸습니다. 즉, 이 막대에서 1개의 주문을 열 수 있지만 현재 막대에서는 1개 이하의 주문을 열 수 있습니다. 다음 주문은 다음 바에서만 열 수 있으며 이전에는 열 수 없습니다..

이제 명확합니까?


각 막대에서 한 위치만 열어 두십시오.

 //+------------------------------------------------------------------+
//|                                                     черновик.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   if (NewBar()== true )
       {
         int ticket= OrderSend ( Symbol (),OP_BUY, 1 ,Ask, 3 ,Bid- 250 * Point ,Ask+ 250 * Point , " " , 16384 , 0 ,Green); 
       }
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
bool NewBar() 
    {

       static datetime LastTime = 0 ;

       if (iTime( NULL , 0 , 0 ) != LastTime) 
       {
          LastTime = iTime( NULL , 0 , 0 );      
           return ( true );
       } else
           return ( false );
    }
 
pako :


각 막대에서 한 위치만 열어 두십시오.

이 방법으로는 할 수 없습니다. 첫 번째 틱에서 조건이 일치하지 않으면 전체 시간이 낭비됩니다.
 
hoz :


쉽게 공식화 할게요! 한 가지 더 생각하지 않았지만 본질을 완전히 언급하겠습니다.

주문 수에 대한 제한이 전혀 없었을 필요가 있습니다. 저것들. 주문은 수량에 관계없이 열 수 있습니다... 얼마나 많은 주문이 있더라도 현재 표시줄에서는 1개의 주문만 열어야 합니다. 그게 다야

저것들. 새 막대가 열렸습니다. 즉, 이 막대에서 1개의 주문을 열 수 있지만 현재 막대에서는 1개 이하의 주문을 열 수 있습니다. 다음 주문은 다음 바에서만 열 수 있으며 이전에는 열 수 없습니다..


그럼 타키
lastBarTime = iTime(NULL, 0, 0);              // На текущем баре все необходимые действия..
현재 표시줄에서 주문이 열린 경우에만. 저것들. OpenBuy/Sell 기능에서 이 줄을 이동합니다.