Nasıl kodlanır? - sayfa 135

 

Gelme hatası

herkese selam

Aşağıdaki hataya sahibim:

'<'-karşılaştırmada farklı türler

Takip satırını değiştirmeye çalışıyorum:

(GecikmesizMA_2D_S2&&D_S2Switch==1)

ile

(Price_NowD_S2&&D_S2Anahtarı==1)

Sorun nerede?

Maalesef mql dosyasını yükleyemiyorum. benim senaryom değil

 
:: Bir şeyi farklı türlerle karşılaştırırsınız, yani tamsayılarla tamsayılar, çiftlerle çiftler, dizeler ile dizeler olması gerekir... bunun gibi...

IN10TION

Badguy:
herkese selam

Aşağıdaki hataya sahibim:

'<'-karşılaştırmada farklı türler

Takip satırını değiştirmeye çalışıyorum:

(GecikmesizMA_2D_S2&&D_S2Switch==1)

ile

(Price_NowD_S2&&D_S2Anahtarı==1)

Sorun nerede?

Maalesef mql dosyasını yükleyemiyorum. benim senaryom değil
 

Sihirli Sayı ile Çoklu Pozisyon Kapatma - Yardım

hepinize merhaba.

Ben mt4 programlamada yeniyim ve aşağıda benim ilk EA'm var. Bu EA'nın amacı, aynı sihirli sayıya dayalı herhangi bir döviz çiftinden bağımsız olarak tüm pozisyonu kapatmaktır.

Diyelim ki sihir # 8675310 altında, EURUSD & USDCFh 2 pozisyonum var. Belli bir kar hedefine ulaştığında tüm bu çiftleri kapatabilecektir.

Bu EA ile ilgili sorun,

Açık İşlem # 1 EURUSD (kapatabilir)

Açık İşlem # 2 USDCFh (kapatamayacak)

2. İŞLEM KAPATILAMAYACAKTIR.

Herhangi bir fikir ?

teşekkürler

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

//| Closing_Trade_By_Magic_No_v1 .mq4 |

//| benim |

//| Forex Ticaret Yazılımı: Forex Ticaret Platformu MetaTrader 4 |

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

#özellik telif hakkı "Benim"

#özellik bağlantısı "http://www.metaquotes.net"

//---- giriş parametreleri

harici int MagicNumber1=8675310;

harici int Kar1=10;

harici int MagicNumber2=8675311;

harici int Kar2=15;

harici int MagicNumber3=8675312;

harici int Kar3=15;

harici int MagicNumber4=8675313;

harici int Kar4=15;

harici int MagicNumber5=8675314;

harici int Kar5=15;

harici int MagicNumber6=0;

harici int Kar6=10;

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

//| uzman başlatma işlevi |

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

int init()

{

onScreenComment(98,"Tengak Initialize..");

//----

//----

dönüş(0);

}

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

//| uzman sıfırlama işlevi |

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

int tanım()

{

//----

//----

dönüş(0);

}

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

//| uzman başlatma işlevi |

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

int başlangıç()

{

string myMessage="";

myMessage = myMessage + ProfitLossMonitor(1,MagicNumber1,Pr ofit1,myMessage);

myMessage = myMessage + ProfitLossMonitor(2,MagicNumber2,Pr ofit2,myMessage);

myMessage = myMessage + ProfitLossMonitor(3,MagicNumber3,Pr ofit3,myMessage);

myMessage = myMessage + ProfitLossMonitor(4,MagicNumber4,Pr ofit4,myMessage);

myMessage = myMessage + ProfitLossMonitor(5,MagicNumber5,Pr ofit5,myMessage);

myMessage = myMessage + ProfitLossMonitor(6,MagicNumber6,Pr ofit6,myMessage);

onScreenComment(98,myMessage);

//----

//----

dönüş(0);

}

string ProfitLossMonitor(int myGroupNumber,int myMagicNumber, int myProfit,string myMessage )

{

int toplam = SiparişlerToplam();

çift MyCurrentProfit=0;

string MyOrderNo="";

için (int cnt = 0 ; cnt < toplam ; cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == myMagicNumber)

{

MyCurrentProfit += OrderProfit();

MyOrderNo= MyOrderNo + "," + OrderTicket();

}

}

if(MyCurrentProfit>=myProfit)

CloseAll(myMagicNumber);

myMessage="Grup Konumu #" + myGroupNumber + " " + myMagicNumber + "=" + myProfit + "(" + DoubleToStr(MyCurrentProfit,2) + " " + MyOrderNo + ")" + "\n" ;

dönüş (mesajım);

}

void CloseAll(int myMagicNumber)

{

int toplam = SiparişlerToplam();

için (int cnt = 0 ; cnt < toplam ; cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == myMagicNumber)

if(OrderType()==OP_BUY)

OrderClose(OrderTicket(),OrderLots( ),Bid,5,Violet);

if(OrderType()==OP_SEL)

OrderClose(OrderTicket(),OrderLots( ),Ask,5,Violet);

}

}

void onScreenComment(int myEvent, myComment dizesi)

{

geçiş (myEvent)

{

vaka 98: Yorum(myComment); kırmak;

}

}

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

Mesajı Düzenle/Sil

 
Bu EA ile ilgili sorun,

Open Transaction # 1 EURUSD (able to close)

Açık İşlem # 2 USDCFh (kapatamayacak)

2 No'lu İŞLEM KAPATILAMAYACAKTIR.

Herhangi bir fikir ?

Emirleri kapatmaya çalıştığınız sırada EURUSD grafiğinde bir adet çalıştırdığınızı varsayıyorum. bu pozisyonlar kapanıyor tamam. Kodunuz USDCHF'yi (biraz dislexies?) kapatmaya çalıştığında, yanlış teklifi ve/veya talebi kullanarak konumlandırır, kullandığı kapanış fiyatı, pozisyon sembolünün fiyatı değil, ea'nın eklendiği döviz çiftindendir . Bu para birimiyle eşleşmeyen bir grafikten başka bir döviz çifti kapatmaya çalışıyorsanız, kapatmaya çalışmadan önce doğru fiyatı almanız gerekir.

keit

edit: Ayrıca, bu durumda para birimi USDCHF, emirleri kapatmak için doğru fiyatları almaya çalışırken piyasa izleme pencerenizde görüntülenmelidir. USDCHF, piyasa izleme penceresinde listelenmiyorsa, o parite için herhangi bir fiyat teklifi alamazsınız.

 

Teşekkürler kovboy!.

" Kapatmaya çalışmadan önce doğru fiyatı almalısınız ".

Yukarıdaki ihtiyaçları yapabilen sözdizimini veya işlevi paylaşır mısınız;

 

bir sonraki bara kadar nasıl ticaret yapılmaz

İlk defa programlama denedim ama bir sorunum var.

- Bir barda bir ticareti kapatırsam, sadece yeni bar açıldığında yeni bir ticaret açabilirim.

Aşağıdakileri denedim;

tarihsaat saat0=0;

int başlangıç()

if (time0 == Time[0]) dönüşü;

{

"program kodu"

}

time0 = Time[0];

dönüş(0);

Bu parçayı çıkarırsam, çeşitli çubuklarda birden fazla giriş alırım. İçerideyken, çok daha az giriş alıyorum (bir geriye dönük testte 70'ten 4'e kadar), ancak eksik girişlerle.

Herkes neyi yanlış yaptığımı biliyor.

Şimdiden teşekkürler.

 

Aşağıdaki NewBar() fonksiyonunu kullanabilirsiniz..

if(NewBar(){ ........burada programlama gibi)

bool NewBar() {

static datetime LastTime = 0;

if (Time[0] != LastTime) {

LastTime = Time[0];

return (true);

} else

return (false);

}

Bir seferde yalnızca bir sipariş istiyorsanız, açık siparişleri de test etmek isteyebilirsiniz.

Umarım yardımcı olur.

Lüks

 

Lüks

Bu konudaki yardımın için teşekkürler.

Sanırım programda neler olduğunu anladım.

Daha önce başlangıçta yeni bir çubuğu kontrol ediyordum, bu yüzden program yeni çubuğun ilk onay işaretini kontrol ederek diğer onay işaretlerini kontrol etmeden benim sinyallerime uyup uymadığını kontrol etti. Bu nedenle, arka testten birkaç ticaret sinyali geldi.

Şimdi kodu doğru bir şekilde yerleştirdim, (yani siparişlerimin gönderildiği yer) iyi çalışıyor gibi görünüyor.

Düşüncemde doğru muyum?

 

Lütfen uzman kodunun güncellenmesine yardımcı olun.

Basit bir uzman var. Kod da açık ve basit, ancak büyük bir sorunum var - uzmanın siparişi Açmak/Kapatmak için yalnızca BİR denemesi var.

Birisi düzeltmeye yardım edebilir mi?

Uzman, siparişi açmak/kapatmak için 5-10 kez denemelidir.

Belki n=deneme sayısı ve lütfen "while" olmadan.

Çok teşekkürler.

Dosyalar:
test.mq4  9 kb
 

'Kayıptan sonra çokça ayarla' kodum, yardıma ihtiyacım var ..teşekkürler

Aşağıdaki kodum 'kayıptan sonra lotları ayarlayın', ancak Test sırasında " ArraySort işlevi için yanlış başlangıç konumu 0 " hata masajı yaptı. Herkes düzeltmeme yardım edebilir mi? yardıma ihtiyacım var..

double AdjtLotsByWinRate( int magicnumber,double NormLots)

{

int i,counter;

int ProfitAndTime[][2];

double Profits[];

//----

ArrayResize(ProfitAndTime,OrdersHistoryTotal());

for (i=0;i<OrdersHistoryTotal();i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

{

if (OrderType()<=OP_SELL && OrderMagicNumber()==magicnumber ) // 0 OP_BUY 1 OP_SELL 2 OP_BUYLIMIT 3 OP_SELLLIMIT 4 OP_BUYSTOP 5 OP_SELLSTOP

{

ProfitAndTime[counter][0]=OrderCloseTime();

ProfitAndTime[counter][1]=OrderProfit();

counter++;

}

}

}

ArrayResize(ProfitAndTime,counter);

ArrayResize(Profits,counter);

ArraySort(ProfitAndTime);

for (i=0;i<counter;i++)

{

Profits=ProfitAndTime[1];

}

//Print(Profits);

int err=GetLastError();

int WinRate_N=0,WinRate_A=5;

double WinRate;

for (i=counter;i<counter-WinRate_A+1;i--)

{

if (Profits>0){

WinRate_N=WinRate_N+1;

}

else if (Profits<0)

{

WinRate_N=WinRate_N-1;

}

else

{

WinRate_N=WinRate_N+0;

}

}

WinRate=WinRate_N/WinRate_A;

double NewLots;

if (WinRate>=0.7)

{

NewLots=NormLots*1.5;

}

else if (WinRate>=0.5 && WinRate<0.7)

{

NewLots=NormLots*1;

}

else if (WinRate>=0.3 && WinRate<0.5)

{

NewLots=NormLots*0.5;

}

else //if (WinRate<0.3)

{

NewLots=NormLots*0.1;

}

return(NewLots);

}

Neden: