Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
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
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ğilSihirli 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
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.
'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);
}