MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 182

 
Artyom Trishkin :
Ve kodunuzun bir parçasını göstermediniz - neyin örneğinin gösterileceği açık değil.

struct p{

double trailingProfit;

int orders[10];

bool flagOpen;// флаг , указывающий на открытость позиции

//тут еще куча связанных параметров

};


p order[];

int OrderN=-1;


int OnInit()
  {

   ArrayResize(pair,1,1000);
 

   return(INIT_SUCCEEDED);
  }

void openOrder(price){

       OrderN++;

       int t;

       ArrayResize(orders,order+1);

      t=OrderSend(Symbol(),OP_BUYSTOP,2,(NormalizeDouble(price,Digits)),3,0,0,"pair",MAGICN,0,Blue);
      if(t==0) Print("не удалось выставить ордер BUYSTOP ", price);

      for(intj=0,j<10,++j){     

      if(orders[OrderN].orders==0) orders[OrderN].orders=t;

      break;

      }

      orders[OrderN].flagOpen=1;

}

//...... тут идет обработка позиций...

void massCut(){

// нужна вот такая функция

}

Expert Advisor uzun süre çalıştığında, dizi işlenemeyecek kadar büyük olur ve onu küçültmek gerekir. Tüm eski kapalı emirler başlangıçtadır, ilk bulunan açık emirden sonraki her şey bırakılmalıdır.
 
Evgenii :

...
Expert Advisor uzun süre çalıştığında, dizi işlenemeyecek kadar büyük olur ve onu küçültmek gerekir. Tüm eski kapalı emirler başlangıçtadır, ilk bulunan açık emirden sonraki her şey bırakılmalıdır.

EA yeniden başlatıldığında yapı dizisine ne olacak?

 
Artyom Trishkin :

EA yeniden başlatıldığında yapı dizisine ne olacak?

dizi uçacak, bu sorun çözülmedi.
 
Evgenii :
dizi uçacak, bu sorun çözülmedi.

Voot. Ve düşünülmesi gereken ilk şey buydu.

Sonuç kendini gösteriyor: dizi sıfıra sıfırlanmalı ve mevcut emir ve pozisyon durumuyla yeniden doldurulmalıdır. Ancak bunu yalnızca hesaptakiemir veya pozisyon sayısında bir değişiklik olduğu gerçeğini yakaladığınızda yapmanız gerekir.

Her zaman elinizin altında sadece mevcut emir ve pozisyon durumu olacak ve var olmayan emirleri/pozisyonları diziden silerek danslar icat etmenize gerek kalmayacak. Ve emirler/pozisyonlar listesi tamamen veya belirli bir geçmiş derinliği aralığına göre kaydırılmalıdır, ancak sadece belirli durumlarda - hesaptaki emirlerin/pozisyonların sayısı değiştirilir.

 
Alexey Viktorov :
Neden böyle bir sapıklık?

böylece OnInit her yeniden başlatma ile dönmez ve statik diziyi tek bir örneğe indirmez, çünkü bazı yerlerde iki kez yazılır .. genel olarak, bu kaynak optimizasyonudur
..peki, olduğu gibi bırakacağım, şu an daha kolay
 
LRA :
Bir boyut belirtmeden global bir dizi bildirirsiniz. İşleviniz boyutunu ArrayResize olarak ayarlar. Ve küresel olarak görünür ve OnInit serbest bırakılır...

tam olarak doğru değil, muhtemelen, açıkça tanımlanmış değerlere sahip statik bir dizi ayrı ayrı başlatmanın bir anlamı yok (
 
Money_Maker :

böylece OnInit her yeniden başlatma ile dönmez ve statik diziyi tek bir örneğe indirmez, çünkü bazı yerlerde iki kez yazılır .. genel olarak, bu kaynak optimizasyonudur
..peki, olduğu gibi bırakacağım, şu an daha kolay
Her yeniden başlatmada OnOnit()'e dönüşmemesi için, başlatmayı kaldırma nedenini kontrol etmek yeterlidir UninitializeReason() ve sonra hiçbir şey anlamadım. Statik bir diziyi azaltmak ne anlama geliyor??? Ve genel olarak, daha iyi bilirsiniz.
 
Ve MT4 test cihazında komisyonlar dikkate alınmaz mı yoksa ne?
 
Andrey Dik :
Ve MT4 test cihazında komisyonlar dikkate alınmaz mı yoksa ne?
Dikkate alınmak için komisyonlu bir hesaba bağlı olmanız gerekiyor gibi görünüyor.
 

Print() işlevi hakkında soru ; Print()'i, verileri EA'larda artı tarih(gün) olarak yazdırmaya nasıl zorlayabilirim? Nasıl çözeceksin? pliz acemi anlamama yardım et, deney uğruna elden geçirilen kodu gönderiyorum, hindi "pivot" önceden ATP!


kodun kendisi: PivotsDaily v2.mq4


#özellik göstergesi_chart_window

#özellik göstergesi_tamponları 3

#özellik göstergesi_color1 Kireç

#özellik göstergesi_color2 Mavi

#özellik göstergesi_color3 Kırmızı


//---- giriş parametreleri

harici int CountBars=300;

//---- arabellekler

çift PBuffer[];

çift S1Buffer[];

çift R1Buffer[];


string Pivot="P",Sup1="S 1", Res1="R 1";


int yazı tipi boyutu=10;

çift P,S1,R1,S2,R2,S3,R3;

çift LastHigh, LastLow,x;

//+------------------------------------------- --------------------+

//| Müşteri göstergesi sıfırlama işlevi |

//+------------------------------------------- --------------------+

int tanım()

{


ObjectDelete("Özet");

ObjectDelete("S1");

ObjectDelete("R1");

dönüş(0);

}

//+------------------------------------------- --------------------+

//| özel gösterge başlatma işlevi |

//+------------------------------------------- --------------------+

int init()

{

string kısa_adı;


Gösterge Tamponları(7);

//---- gösterge çizgisi

SetIndexStyle(0,DRAW_OK,2,1,Kireç);

SetIndexArrow(0.158);

SetIndexStyle(1,DRAW_OK,2,1,Mavi);

SetIndexArrow(1,158);

SetIndexStyle(2,DRAW_OK,2,1,Kırmızı);

SetIndexArrow(2,158);


SetIndexBuffer(0,PBuffer);

SetIndexBuffer(1,S1Buffer);

SetIndexBuffer(2,R1Buffer);


//---- DataWindow ve gösterge alt pencere etiketi için isim

short_name="pivot";

GöstergeShortName(short_name);

SetIndexLabel(0,short_name);

kısa_adı="R1";

GöstergeShortName(short_name);

SetIndexLabel(2,short_name);


kısa_adı="S1";

GöstergeShortName(short_name);

SetIndexLabel(1,short_name);


SetIndexDrawBegin(0,6);

//----


dönüş(0);

}

//+------------------------------------------- --------------------+

//| özel gösterge yineleme işlevi |

//+------------------------------------------- --------------------+

int başlangıç()


{

int counted_bars=IndicatorCounted();


int limit, i;

//---- gösterge hesaplama

if (counted_bars==0)

{

x=Dönem();

if (x>CountBars) return(-1);

ObjectCreate("Özet", OBJ_TEXT, 0, 0,0);

ObjectSetText("Özet", "Özet",10,"Arial",Kireç);

ObjectCreate("S1", OBJ_TEXT, 0, 0, 0);

ObjectSetText("S1", "S1",10,"Arial",Mavi);

ObjectCreate("R1", OBJ_TEXT, 0, 0, 0);

ObjectSetText("R1", "R1",10,"Arial",Kırmızı);

}

if(counted_bars<0) return(-1);


limit=(barlar-sayılan_barlar)-1;


(i=limit; i>=0;i--) için

{

if (TimeDayOfWeek(Time[i]) != 0)

{

if (Yüksek[i+1]>SonYüksek) SonYüksek=Yüksek[i+1];

if (Düşük[i+1]<SonDüşük) LastDüşük=Düşük[i+1];

}


Eğer (

TimeDay(Time[i])!=TimeDay(Time[i+1]) && TimeDayOfWeek(Time[i])!=0

)

{

P=Kapat[i+1];

R1=SonDüşük;

S1=SonYüksek;

S2=Yüksek[i]-Düşük[i];

S3=Yüksek[i]-Açık[i+1];

if(S3==0)

{R2 = S3;} başka {R2 = S2/S3;}

Yazdır("R2",R2); // <= print plus data tarihi nasıl yazdırır?


LastLow=Aç[i]; LastHigh=Aç[i];

ObjectMove("Pivot", 0, Zaman[i],P);

ObjectMove("S1", 0, Zaman[i],S1);

ObjectMove("R1", 0, Zaman[i],R1);

}

PTampon[i]=P;

S1Tampon[i]=S1;

R1Tampon[i]=R1;

}

//----

dönüş(0);

}

Neden: