[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 132

 
Roman. :

IMHO, zor değil, "yönlendirmek" veya göndermek çok basit,

Tabii ki, "göndermek" daha kolay. önermek yerine "gönder". Ama aslında, beni bir ders kitabına sokmak için hiçbir şey istemedim. Gerçeğin bir kopyasını bir yerde yazdı, ancak öz değişmez.

artmedia70 :

Pekala, nihayet, tam olarak ne yapmak istediğini söyle... Örneğin: Mashka falan yükseliyor ve Mashka falandan daha yüksek, fiyat oradayken, Mashka falanın altında / üstünde, ve tüm bunlar doğruysa , o zaman böyle ve böyle bir gecikmeyi böyle ve böyle bir mesafede ayarlayın. Size örnek bir algoritma vereceğim. Ve sonra, bağlam dışı alınan kod parçalarından sizi doğru yöne yönlendirmek zordur. Ama sorun beşinci sınıf için bir şey (abartılı)



Buraya kodun bir test sürümünü ekliyorum ve onu da yazımda yayınlıyorum.

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

Koşullar, bekleyen fiyatın MA değerinin + (-) girintisinin üstünde (altında) olduğunu açıkça belirtir.

İşte burada:

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

Sinyal, yalnızca fiyat MA "boşluk" bölgesi +(-) ofsetine ulaştığında hesaplanmalıdır.

Bir satın alma işlevinde, örneğin:

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

Satın alma, i_thresholdFromMa * pt ile fastMa'nın üzerinde olmalıdır.

Aslında, o orada değil. Ya dildeki söve ya da arabadaki mesele. Neye ihtiyacım olduğunu başka nasıl açıklayabilirim? Tüm kodu ek koşullar ve işlevler olmadan verdim (yalnızca bir sinyal çıplak ve açılıyor) .
 

Her şey zaten net bir şekilde yazılmış ( testçi için gerçek bir kontrol yapmadım! )

Nasıl açılır:

Orada açılmıyor.

artmedia70 :


Vurgulananla ilgili olarak : açılış fiyatlarında çalışın, o zaman sıfır çubuğunda MA'ların yeniden çizilmesi olmayacak

Özellikle 1. bar için bir koşul koydum, böylece yanlış anlaşılmalar olmadı. Ana şey nasıl başlayacağınızdır ...
Dosyalar:
test_ma.mq4  8 kb
 
Başlangıç bayrağını, örneğin göstergede her saatin dördüncü beş dakikasını tanımlamak gerekir.
 if ( Minute()== 15 )
 Hiçbir şeyi atlamaz. Doğru yönde itin.
 

Böyle bir sorum var - ticaret kriterlerini formüle ederken sağa kaydırmalı hareketli bir ortalama kullanırsam, kaydırma değeri pozitiftir.

Ardından, bir sinyal oluştururken, hareketli ortalamanın değerini sıfır veya ilk çubukta değil, kaydırma değerine karşılık gelen bir indeks ile çubukta kullanmanız gerekir. doğru düşünüyorum ya da düşünmüyorum.

 
Operr :
Başlangıç bayrağını, örneğin göstergede her saatin dördüncü beş dakikasını tanımlamak gerekir.


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

Böyle bir sorum var - ticaret kriterlerini formüle ederken sağa kaydırmalı hareketli bir ortalama kullanırsam, kaydırma değeri pozitiftir.

Ardından, bir sinyal oluştururken, hareketli ortalamanın değerini sıfır veya ilk çubukta değil, kaydırma değerine karşılık gelen bir indeks ile çubukta kullanmanız gerekir. doğru düşünüyorum ya da düşünmüyorum.


Grafiğe bir ortalama atın ve hangi dizine ihtiyacınız olduğunu görün. Burada görsel olarak görebilirsiniz.
 
hoz :

Tabii ki, "göndermek" daha kolay. önermek yerine "gönder". Ama aslında, beni bir ders kitabına sokmak için hiçbir şey istemedim. Gerçeğin bir kopyasını bir yerde yazdı, ancak öz değişmez.

Buraya kodun bir test sürümünü ekliyorum ve onu da yazımda yayınlıyorum.

Koşullar, bekleyen fiyatın MA'dan MA değeri + (-) girintisinin üstünde (altında) olduğunu açıkça belirtir.

İşte burada:

Sinyal, yalnızca fiyat MA "boşluk" bölgesi +(-) ofsetine ulaştığında hesaplanmalıdır.

Bir satın alma işlevinde, örneğin:

Satın alma, i_thresholdFromMa * pt ile fastMa'nın üzerinde olmalıdır.

Aslında, o orada değil. Ya dildeki söve ya da arabadaki mesele. Neye ihtiyacım olduğunu başka nasıl açıklayabilirim? Tüm kodu ek koşullar ve işlevler olmadan verdim (yalnızca bir sinyal çıplak ve açılıyor) .
 

Her şey zaten net bir şekilde yazılmış ( testçi için gerçek bir kontrol yapmadım! )

Nasıl açılır:

Özellikle 1. bar için bir koşul koydum, böylece yanlış anlaşılmalar olmadı. Ana şey nasıl başlayacağınızdır ...
Bir kez daha soruyorum: Tam olarak ne zaman sipariş vermek istiyorsunuz? Kendi kodunuzla değil (anlamak istemeyin - ayrıştırılacak çok sayıda kendi kodunuz var), sadece kelimelerle yanıtlayın ,

örneğin: Mashka'nın üstünde / altında bir gecikme ayarlamak istiyorum, şu şartla ki ... tyry-pyry-yo-my ...

İkinci kez açıklamanı istediğimde, gerçekten zor mu? Sorununuzu zaten çözdünüz.

 
Ve bir şey daha: global olarak tanımlanmış fastMA ve slowMA'nız varsa, neden bunları işlevlere aktarıyorsunuz? Tüm işlevler, parametrelerini çağrılan işleve geçirmeden yine de onları görür.
 

Güzel gün.

Uzman Danışmanlardaki boşluklarla nasıl başa çıkacağımı söyle?

Genellikle hafta sonu boyunca geçiş döneminde boşluklar vardır ve bunlar gerçekleştikten sonra, sipariş donmalarıyla çalışın, bu nasıl düzeltilir, şimdiden teşekkürler!

 

Artyom, sizce hangisi daha hızlı çalışacak, MathMax ile mi yoksa if ile mi bir ifade?

 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;


kelimelerle açıklamadım çünkü bu ifadenin hatalardan 130 kaçınmama hizmet ettiği açık ve bana iyi hizmet ediyor!

Şimdiden teşekkürler!

 
hoz :

Grafiğe bir ortalama atın ve hangi dizine ihtiyacınız olduğunu görün. Burada görsel olarak görebilirsiniz.

üzerine attı. Cevap benim için pek açık değil, o yüzden tekrar soracağım. Sizi doğru anladım, ticaret koşullarını formüle ederken gerekli

karşılık gelen çubuk sayısı için MA değerini kullanmanız gerekir, ancak şekilde sarı okla işaretlenen değeri değil.

Cevabınızı anladığım için resmi çizdim.

Neden: