OrderSend() işlevinde hata mı var? - sayfa 9

 
borilunad :
Bu nedenle, ma-carların çubuklara tam oranını belirlemek gerekli değildir. Maskaraları sadece maskaralı olarak düşünebilirsiniz ve bunları sinyal olarak değil filtre olarak kullanmak daha iyidir.

Boris , kısmen haklısın. Temel olarak, fare bir işaretçidir. Yine de, birkaç seçenek var. Birisi karşı trende nereden gireceğini arıyor ve biri trendi takip ediyor.Birçok varyasyon var, AMA henüz gerektiği gibi çalışmadılar :(
 
hoz :

Boris , kısmen haklısın. Temel olarak, fare bir işaretçidir. Yine de, birkaç seçenek var. Birisi karşı trende nereden gireceğini arıyor ve biri trendi takip ediyor.Birçok varyasyon var, AMA henüz gerektiği gibi çalışmadılar :(
Başkaları için üzülme! Kendinizinkini arayın ve bulacaksınız! Göstergeler için umut edilecek bir şey yok diyenler haklı çünkü fiyata ayak uyduramıyorlar. Pazara girmeniz gerekiyor, eğilimleri en azından daha az riskli. Ve en önemlisi, olası bir kâr ve optimal kapanış için bir pozisyonu korumak. :)
 

Evet, öz üzüntüde değil, başkalarında da değil. Sonuç olarak, bir hata var ve destek hiç yanıt vermiyor! Müşterileri gerçekten önemsiyorlar mı? Bu benim için çok ilginç. Emir neredeyse bir haftadır askıda ve hiçbir tepki yok... Bir göz atıp fiyatın mevcut çubukta nasıl gittiğini, katran vuruşu kesiyor, ancak erteleme olmadığını gösterebilir misiniz? Evet, bu ana sarıldım, AMA sadece sebebini anlamak niyetiyle. Pazartesiden itibaren bir demo için test edeceğim, ama ... tekrar .. eğer test cihazı tamamen hatalıysa, o zaman ne için gerekli?

 
hoz :

... Bir video çekebilir ve fiyatın mevcut çubukta nasıl gittiğini gösterebilirsiniz, katran çizgiyi keser ...

Masha'da buna sahip değildim.
 
tara :
Masha'da buna sahip değildim.


Hangi Maşa ile?

Hangi durumlarda özellikle yazdım. O zaman neden kendine transfer oluyorsun? Dal zaten 9 sayfa uzunluğunda ve "işler hala orada."

kodu ekliyorum. İşte görüntülemek için aynı kod:

//+-----------------------------------------------------------------------------------+
//|                                                                       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);
}

BAZI BARLAR NEDEN OLMADAN PİRİNÇ BİR ŞEKİLDE İHMAL EDİLMİŞTİR. Ve elbette, mevduat üzerlerine yerleştirilmez. Kod doğru. Gördüğüm kadarıyla düzeltilecek bir şey yok.

İşte pozisyonların açılmadığını gösteren ekran görüntüleri. Test tarihleri de orada görülebilir. Lütfen nedenini bulmama yardım et. Ve sonra her şey dalda zaten tartışıldı, ancak asıl soru değil.

1

2

3

Dosyalar:
test_ma_4.mq4  10 kb
 
pako :
TOR'u yeniden formüle etmek zor değilse, neden yeni çubuğun kontrolüne ihtiyacınız var?



Kolayca formüle edeceğim! Bir nokta daha aklıma gelmedi, AMA özü tam olarak belirteceğim.

Sipariş sayısında herhangi bir kısıtlama olmaması gerekir. Onlar. emirler herhangi bir miktarda açılabilir... kaç tane olursa olsun, AMA mevcut çubukta sadece 1 emrin açılması gerekir. Bu kadar.

Onlar. yeni bir çubuk açıldı, yani bu çubuk sırasında 1 sipariş açabilirsiniz, ancak mevcut çubukta 1'den fazla sipariş açamazsınız. Bir sonraki sipariş sadece bir sonraki barda açılabilir, daha önce açılamaz..

Şimdi açık mı?

Ve burada yanılıyorsunuz...

 //+-------------------------------------------------------------------------------------+
//| Функция 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

   

Onay süreleri farklıdır... i_fastMaPeriod ve i_slowMaPeriod sırasıyla 10 ve 21'dir!

 

Önerilen Kaynaklar

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

 
hoz :


Kolayca formüle edeceğim! Bir nokta daha aklıma gelmedi, AMA özü bütünüyle belirteceğim.

Sipariş sayısında herhangi bir kısıtlama olmaması gerekir. Onlar. emirler herhangi bir miktarda açılabilir... kaç tane olursa olsun, AMA mevcut çubukta sadece 1 emrin açılması gerekir. Bu kadar.

Onlar. yeni bir çubuk açıldı, yani bu çubuk sırasında 1 sipariş açabilirsiniz, ancak mevcut çubukta 1'den fazla sipariş açamazsınız. Bir sonraki sipariş sadece bir sonraki barda açılabilir, daha önce açılamaz..

Şimdi açık mı?


her çubukta sadece bir pozisyonu açık tutun

 //+------------------------------------------------------------------+
//|                                                     черновик.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 :


her çubukta sadece bir pozisyonu açık tutun

Bu şekilde yapamazsınız. Durumunuz ilk tikte eşleşmediyse, tüm saat boşa gidecektir.
 
hoz :


Kolayca formüle edeceğim! Bir nokta daha aklıma gelmedi, AMA özü tam olarak belirteceğim.

Sipariş sayısında herhangi bir kısıtlama olmaması gerekir. Onlar. emirler herhangi bir miktarda açılabilir... kaç tane olursa olsun, AMA mevcut çubukta sadece 1 emrin açılması gerekir. Bu kadar.

Onlar. yeni bir çubuk açıldı, yani bu çubuk sırasında 1 sipariş açabilirsiniz, ancak mevcut çubukta 1'den fazla sipariş açamazsınız. Bir sonraki sipariş sadece bir sonraki barda açılabilir, daha önce açılamaz..


Taki o zaman
lastBarTime = iTime(NULL, 0, 0);              // На текущем баре все необходимые действия..
yalnızca mevcut çubukta bir sipariş açılırsa. onlar. OpenBuy/Sell işlevinde bu satırı hareket ettirin