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

 

Sevgili profesyonel meslektaşlar, yardımınıza ihtiyacımız var. EA'da, ekranın üst köşesinde farklı zaman dilimlerindeki mevcut eğilim ve yaklaşan geri dönüş hakkında bir bildirim görüntüleyen bir işlev yapmak istiyorum. Bunu yapmak için LinearRegression ve Diverg fonksiyonlarımı kullanıyorum. Ancak, Yorum işleviyle hiç çalışmadım, bu yüzden nerede hata yaptığımı anlayamıyorum. Genel olarak, aşağıdaki kodun bir sonucu olarak, ekranda sadece "Trend W = Down" yazısı çıkıyor, ancak diğer tüm TF'ler için de bilgi görüntülenmesini istiyorum.

geçersiz UPDN()
{
if(LinearRegression(Symbol( ), LR_TFr_1, 0, Diver_Per_H1, 0) < 0) Comment("Trend H1 = Yukarı");
if(Diverg(LR_TFr_1,0,Diver_Per_H1)<0) Comment("...!H1'e Ters = Aşağı");
if(LinearRegression(Symbol( ), LR_TFr_2, 0, Diver_Per_H4, 0) < 0) Comment("Trend H4 = Yukarı");
if(Diverg(LR_TFr_2,0,Diver_Per_H4)<0) Comment("...!H4'e Ters = Aşağı");
if(LinearRegression(Symbol( ), LR_TFr_3, 0, Diver_Per_D1, 0) < 0) Comment("Trend D1 = Yukarı");
if(Diverg(LR_TFr_3,0,Diver_Per_D1)<0) Comment("...!D1'e Ters = Aşağı");
if(LinearRegression(Symbol( ), LR_TFr_4, 0, Diver_Per_W, 0) < 0) Comment("Trend W = Yukarı");
if(Diverg(LR_TFr_4,0,Diver_Per_W)<0) Comment("...!W'ye Dön = Aşağı");

if(LinearRegression(Symbol( ), LR_TFr_1, 0, Diver_Per_H1, 0) > 0) Comment("Trend H1 = Down");
if(Diverg(LR_TFr_1,0,Diver_Per_H1)>0) Comment("...!H1'e Ters = Yukarı");
if(LinearRegression(Symbol( ), LR_TFr_2, 0, Diver_Per_H4, 0) > 0) Comment("Trend H4 = Down");
if(Diverg(LR_TFr_2,0,Diver_Per_H4)>0) Comment("...!H4'e Ters = Yukarı");
if(LinearRegression(Symbol( ), LR_TFr_3, 0, Diver_Per_D1, 0) > 0) Comment("Trend D1 = Down");
if(Diverg(LR_TFr_3,0,Diver_Per_D1)>0) Comment("...!D1'e Ters = Yukarı");
if(LinearRegression(Symbol( ), LR_TFr_4, 0, Diver_Per_W, 0) > 0) Comment("Trend W = Down");
if(Diverg(LR_TFr_4,0,Diver_Per_W)>0) Comment("...!W'ye Dön = Yukarı");
dönüş(0);
}

 
Optim :

Sevgili profesyonel meslektaşlar, yardımınıza ihtiyacımız var. EA'da, ekranın üst köşesinde farklı zaman dilimlerindeki mevcut eğilim ve yaklaşan geri dönüş hakkında bir bildirim görüntüleyen bir işlev yapmak istiyorum. Bunu yapmak için LinearRegression ve Diverg fonksiyonlarımı kullanıyorum. Ancak, Yorum işleviyle hiç çalışmadım, bu yüzden nerede hata yaptığımı bulamıyorum. Genel olarak, aşağıdaki kodun bir sonucu olarak, ekranda sadece "Trend W = Down" yazısı çıkıyor, ancak diğer tüm TF'ler için de bilgi görüntülenmesini istiyorum.

geçersiz UPDN()
{
if(LinearRegression(Symbol( ), LR_TFr_1, 0, Diver_Per_H1, 0) < 0) Comment("Trend H1 = Yukarı");
if(Diverg(LR_TFr_1,0,Diver_Per_H1)<0) Comment("...!H1'e Ters = Aşağı");
if(LinearRegression(Symbol( ), LR_TFr_2, 0, Diver_Per_H4, 0) < 0) Comment("Trend H4 = Yukarı");
if(Diverg(LR_TFr_2,0,Diver_Per_H4)<0) Comment("...!H4'e Ters = Aşağı");
if(LinearRegression(Symbol( ), LR_TFr_3, 0, Diver_Per_D1, 0) < 0) Comment("Trend D1 = Yukarı");
if(Diverg(LR_TFr_3,0,Diver_Per_D1)<0) Comment("...!D1'e Ters = Aşağı");
if(LinearRegression(Symbol( ), LR_TFr_4, 0, Diver_Per_W, 0) < 0) Comment("Trend W = Yukarı");
if(Diverg(LR_TFr_4,0,Diver_Per_W)<0) Comment("...!W'ye Dön = Aşağı");

if(LinearRegression(Symbol( ), LR_TFr_1, 0, Diver_Per_H1, 0) > 0) Comment("Trend H1 = Down");
if(Diverg(LR_TFr_1,0,Diver_Per_H1)>0) Comment("...!H1'e Ters = Yukarı");
if(LinearRegression(Symbol( ), LR_TFr_2, 0, Diver_Per_H4, 0) > 0) Comment("Trend H4 = Down");
if(Diverg(LR_TFr_2,0,Diver_Per_H4)>0) Comment("...!H4'e Ters = Yukarı");
if(LinearRegression(Symbol( ), LR_TFr_3, 0, Diver_Per_D1, 0) > 0) Comment("Trend D1 = Down");
if(Diverg(LR_TFr_3,0,Diver_Per_D1)>0) Comment("...!D1'e Ters = Yukarı");
if(LinearRegression(Symbol( ), LR_TFr_4, 0, Diver_Per_W, 0) > 0) Comment("Trend W = Down");
if(Diverg(LR_TFr_4,0,Diver_Per_W)>0) Comment("...!W'ye Dön = Yukarı");
dönüş(0);
}


geçersiz Yorum ( ...)
İşlev, grafiğin sol üst köşesinde kullanıcı tanımlı bir yorum görüntüler. Parametreler herhangi bir tipte olabilir. Parametre sayısı 64'ü geçemez.

Diziler, Comment() işlevine geçirilemez. Diziler, eleman eleman yazdırılmalıdır.

Çift veri, noktadan sonra 4 ondalık basamakla verilir. Sayıları daha hassas bir şekilde görüntülemek için DoubleToStr() işlevini kullanmanız gerekir.
bool, datetime ve color türleri sayı olarak yazdırılacaktır.
Datetime verilerini bir dize olarak çıkarmak için TimeToStr() işlevini kullanın.

Çıktı bilgilerini birden çok satıra ayırmak için yeni satır karakteri "\n" veya "\r\n" kullanabilirsiniz.
Alert() ve Print() işlevlerine de bakın .
Seçenekler:
... - Virgülle ayrılmış herhangi bir değer.
Misal:
 çift serbest=HesapFreeMargin();
  Comment("Hesap serbest marjı ",DoubleToStr(ücretsiz,2),"\n","Geçerli saat ",TimeToStr(TimeCurrent()));
 
En azından soru sormadan önce belgeleri okuyun. Cevapların yarısı zaten orada.
 

Teşekkür ederim. Anladım. Her TF için LinearRegression ve Diverg fonksiyonlarını çözmenin sonuçlarına göre değişkenler girmem ve sonra bunları bir yorumda, belki birkaç satırda görüntülemem gerekiyor.

 
Optim :

Teşekkür ederim. Anladım. Her TF için LinearRegression ve Diverg fonksiyonlarını çözmenin sonuçlarına göre değişkenler girmem ve sonra bunları bir yorumda, belki birkaç satırda görüntülemem gerekiyor.


Sadece hattın uzunluğu ile ilgili kısıtlamalar vardır. İşlevi Alexander Pak'tan kullanabilirsiniz. bulamazsan ben kendim ararım
 

Bayanlar ve Baylar!

Bir diziyi referans olarak geçirme hakkında bir sorum var.

Algoritmanın şeması aşağıdaki gibidir:

Bir kütüphaneden diğerine, bir diziyi referans olarak iletiriz.

Orada yerleşik işlev aracılığıyla kopyalıyoruz:

Dizi Kopyala.

Ayrıca, referansla geçirilen dizi zaten kullanılıyor

ilk modülde.

Ancak bazı nedenlerden dolayı bir hata oluşur ve her zaman değil.

Onlar. bazen kopyalama oluyor bazen olmuyor.

Sebebi ne?

Günlük girişi aşağıdaki gibidir:

21:07:12 openHistory CADCHF,H1:

ArrayCopy işlevi için uyumlu 2 dizi aralığı (0 ve 4)

Modülü bağlarız

kopyala

 
Roger :
Örneğimi yanlış kopyaladığınız için. Dikkatlice bakın nerede i ve nerede k.

Kod sizinkine göre düzeltildi.
Test sırasında, ilk kene, beşinci - bir sonrakine yerleştirme sırasına göre dört sipariş kapatıldı. Muhtemelen burada yanlış olan başka bir şey var. tekrar tekrar test edildi.
Program kodu ve test cihazının günlüğündeki girişler verilir.
Samimi olarak. shurkin

Код программы.
//+------------------------------------------------------------------+
//|                                                     Poligon1.mq4 |
//|                                            21 февраля 2013 года. |
//|Тестирование оператора цикла for.                                 |
//+------------------------------------------------------------------+
#property copyright "21 февраля 2013 года."
#property link       ""
//+------------------------------------------------------------------+
//|Объявленные переменные                                            |
//+------------------------------------------------------------------+
int Mn= 357 ; //Magic number
int i; //Показатель счётчика итераций
double PriTP; //TP серии
int Tick; //Счётчик тиков
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----Установка серии ордеров
OrderSend ( Symbol (),OP_BUY, 0.5 ,Ask, 0 , NormalizeDouble (Bid- 35 * Point , Digits ),
NormalizeDouble (Ask+ 35 * Point , Digits ), NULL ,Mn, 0 , CLR_NONE ); //OP_BUY
OrderSend ( Symbol (),OP_BUY, 1 ,Ask, 0 , NormalizeDouble (Bid- 25 * Point , Digits ),
NormalizeDouble (Ask+ 25 * Point , Digits ), NULL ,Mn, 0 , CLR_NONE ); //OP_BUY
OrderSend ( Symbol (),OP_BUY, 1.5 ,Ask, 0 , NormalizeDouble (Bid- 15 * Point , Digits ),
NormalizeDouble (Ask+ 15 * Point , Digits ), NULL ,Mn, 0 , CLR_NONE ); //OP_BUY
OrderSend ( Symbol (),OP_BUY, 2.5 ,Ask, 0 , NormalizeDouble (Bid- 15 * Point , Digits ),
NormalizeDouble (Ask+ 15 * Point , Digits ), NULL ,Mn, 0 , CLR_NONE ); //OP_BUY
OrderSend ( Symbol (),OP_BUY, 3.5 ,Ask, 0 , NormalizeDouble (Bid- 15 * Point , Digits ),
NormalizeDouble (Ask+ 15 * Point , Digits ), NULL ,Mn, 0 , CLR_NONE ); //OP_BUY
OrderSend ( Symbol (),OP_BUYLIMIT, 1 , NormalizeDouble (Ask- 15 * Point , Digits ), 0 ,
NormalizeDouble (Bid- 40 * Point , Digits ), NormalizeDouble (Ask+ 25 * Point , Digits ),
NULL ,Mn, 0 , CLR_NONE ); //OP_BUYLIMIT
OrderSend ( Symbol (),OP_SELLSTOP, 3 , NormalizeDouble (Ask- 30 * Point , Digits ), 0 ,
NormalizeDouble (Bid+ 15 * Point , Digits ), NormalizeDouble (Ask- 75 * Point , Digits ),
NULL ,Mn, 0 , CLR_NONE ); //OP_SELLSTOP
//----
   PriTP=Bid; //PriTP
   Print ( "Кс0:" , " OrdersTotal=" , OrdersTotal ()); //Сообщение
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   Tick++; //Tick
//   Print("Кс0:"," Tick=",Tick);//Сообщение
//----
//   for(i=0;i<OrdersTotal();i++)//Инициализация цикла
//   for(i=OrdersTotal()-1; i>=0; i--)//
   for (i= 0 , int k= 0 ; i< OrdersTotal ();i++,k++) //
   {
   Print ( "Кс1:" , " Tick=" ,Tick, " i=" ,i, " k=" ,k); //Сообщение
   if ( OrderSelect (k,SELECT_BY_POS,MODE_TRADES)== true ) //Выбор ордера k
    {
   if (OrderSymbol()== Symbol ()) //Символ
     {
   if (OrderMagicNumber()==Mn) //Идентификационное число
      {
   if (OrderType()==OP_BUY && OrderTakeProfit()>PriTP) //Тип операции текущего выбранного ордера
       {
   OrderClose(OrderTicket(),OrderLots(),Bid, 0 , CLR_NONE ); //Закрытие позиции
   k--; //?
       } //Закрыто if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
      } //Закрыто if(OrderMagicNumber()==Mn)
     } //Закрыто if(OrderSymbol()==Symbol()
    } //Закрыто if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
   } //Закрыто for(i=0, int k=0; i<OrdersTotal();i++,k++)
/*   
   for(i=0, int k=0; i<OrdersTotal();i++,k++)//
   {
   Print("Кс1:"," Tick=",Tick," i=",i," k=",k);//Сообщение
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)//Выбор ордера i
    {
   if(OrderSymbol()==Symbol())//Символ
     {
   if(OrderMagicNumber()==Mn)//Идентификационное число
      {
   if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//Тип операции текущего выбранного ордера
       {
   OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Закрытие позиции
   k--;//Зачем сначала прибавлять и тут же убавлять ???
       }//Закрыто if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
      }//Закрыто if(OrderMagicNumber()==Mn)
     }//Закрыто if(OrderSymbol()==Symbol()
    }//Закрыто if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
   }//Закрыто for(i=0;i<OrdersTotal();i++)
*/    
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+ 
Записи в журнале тестера.
2013.03 . 18 13 : 58 : 21      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Êñ 1 : Tick= 4 i= 1 k= 1
2013.03 . 18 13 : 58 : 21      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Êñ 1 : Tick= 4 i= 0 k= 0
2013.03 . 18 13 : 57 : 57      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Êñ 1 : Tick= 3 i= 1 k= 1
2013.03 . 18 13 : 57 : 57      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Êñ 1 : Tick= 3 i= 0 k= 0
2013.03 . 18 13 : 57 : 33      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Êñ 1 : Tick= 2 i= 1 k= 0
2013.03 . 18 13 : 57 : 33      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: close # 5 buy 3.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3394
2013.03 . 18 13 : 57 : 33      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Êñ 1 : Tick = 2 i= 0 k= 0
2013.03 . 18 13 : 57 : 09      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: close # 4 buy 2.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3395
2013.03 . 18 13 : 57 : 09      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Êñ 1 : Tick= 1 i= 3 k= 0
2013.03 . 18 13 : 57 : 09      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: close # 3 buy 1.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3395
2013.03 . 18 13 : 57 : 09      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Êñ 1 : Tick= 1 i= 2 k= 0
2013.03 . 18 13 : 57 : 09      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: close # 2 buy 1.00 EURUSD at 1.3397 sl: 1.3370 tp: 1.3422 at price 1.3395
2013.03 . 18 13 : 57 : 09      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Êñ 1 : Tick= 1 i= 1 k= 0
2013.03 . 18 13 : 57 : 09      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: close # 1 buy 0.50 EURUSD at 1.3397 sl: 1.3360 tp: 1.3432 at price 1.3395
2013.03 . 18 13 : 57 : 09      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Êñ 1 : Tick= 1 i= 0 k= 0
2013.03 . 18 13 : 57 : 09      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Êñ 0 : OrdersTotal = 7
2013.03 . 18 13 : 57 : 09      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: open # 7 sell stop 3.00 EURUSD at 1.3367 sl: 1.3410 tp: 1.3322 ok
2013.03 . 18 13 : 57 : 09      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: open # 6 buy limit 1.00 EURUSD at 1.3382 sl: 1.3355 tp: 1.3422 ok
2013.03 . 18 13 : 57 : 09      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: open # 5 buy 3.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03 . 18 13 : 57 : 09      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: open # 4 buy 2.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03 . 18 13 : 57 : 09      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: open # 3 buy 1.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03 . 18 13 : 57 : 09      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: open # 2 buy 1.00 EURUSD at 1.3397 sl: 1.3370 tp: 1.3422 ok
2013.03 . 18 13 : 57 : 09      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: open # 1 buy 0.50 EURUSD at 1.3397 sl: 1.3360 tp: 1.3432 ok
2013.03 . 18 13 : 57 : 09      Poligon1 test started
2013.03 . 18 13 : 57 : 02      Poligon1 EURUSD,M15: loaded successfully
 
Program yürütme kaynaklarının maliyetini azaltmak açısından bir değişkenin türünü (int, double, vb.) bildirmek nerede daha iyidir. Örneğin. int i global düzeyde veya int start() ... in for (int i=OrdersTotal()-1; i>=0; i--) olarak bildirilebilir ... Bildirimin dış parametrelerden hemen sonra, küresel düzeyde bir kereden daha pahalıdır. Yoksa kaynak yoğunluğundaki fark aynı mı?
 
Zhunko :
Başlangıcı döngülemek gerekir. Döngünün içinde çalışın. Orada her şey mümkün.

bu biraz farklı. bağlantı kesildiğinde, günlükte "Ping başarısız oldu" yazıyor. işlevler olduğu anlamına gelir, ancak bir nedenden dolayı belgelenmezler.
ve döngü yapıldığında CPU ve bellek üzerindeki yük ne kadar artar?

 
Dimka-novitsek :

İyi akşamlar! Üzgünüm, çözülmemiş bir soruna dönmek istiyorum.

'Satın al' - uyumsuz türler D:\TeleTRADE\experts\pure varyant.mq4 (102, 53)

'Sat' - uyumsuz türler D:\TeleTRADE\experts\pure varyant.mq4 (102, 79)


 if (!Pishem&&PozyProstavleny){SaveArray(FileBuy, Buy); SaveArray(FileSell, Sell); Pishem= 1 ;}

Bu satır derlenmiyor.