Sormak! - sayfa 157

 

Bunun gibi bir şey deneyin:

string uniqueFileName()

{

string sname=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);

string tname="";

for (int i=0;i<StringLen(sname);i++)

{

string char = StringSubstr(sname,i,1);

if (char!="." && char!=":")

if (char==" ")

tname = tname+"_";

else tname = tname+char;

}

return(tname+"_"+Symbol()+Period()+".csv");

}[/php]this one adds hour, minute and seconds in the middle to make it more or less unique (so something like this " 20090924_102541_EURUSD15.csv "). To make it really sure that the file does not exist it would have to be a bit more complicated (something like this :

[php]string uniqueFileName()

{

string sname=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);

string tname="";

int thand;

for (int i=0;i<StringLen(sname);i++)

{

string char = StringSubstr(sname,i,1);

if (char!="." && char!=":")

if (char==" ")

tname = tname+"_";

else tname = tname+char;

}

//

//

//

//

//

tname = tname+"_"+Symbol()+Period()+".csv";

thand = FileOpen(tname,FILE_BIN|FILE_READ);

if (thand==-1)

return(tname);

else

{

FileClose(thand);

return("failed to make unique name");

}

}

Başarısız olursa " benzersiz ad oluşturulamadı " dizesini döndürür, bu durumda tekrar kaç kez denemek istediğinize karar vermeniz gerekir.

Not: kullanım, someFileName=uniqueFileName();

Saygılarımızla

mladen

tedalagi:
herkese selam,

Ben bir tüccarım ama mq4 dilini bilmiyorum ve salı gününden beri bunu yapmaya çalışıyorum ...

Bir komut dosyası kullanarak grafiğimi csv biçiminde kaydetmem gerekiyor. Herhangi bir çizelgeye ve herhangi bir zaman dilimine basitçe sürükleyebileceğim güzel bir betiğim var ve dosya adı dışında gayet iyi.

Grafiği her kaydettiğimde otomatik olarak benzersiz bir dosya adı oluşturabilmesini diliyorum, böylece aynı klasöre başka bir dosya kaydettiğimde yeniden adlandırmak zorunda kalmıyorum.

string fname = [YYYYMMDD formatında tarih] + "_"+ [yalnızca tarih - saat] +"_" + Symbol() + Period() + ".csv";

Söz konusu kod kalın harflerle yazılmıştır.

Kodu doğru bulduğumda, çıktı dosya adının şöyle görüneceğini düşünüyorum.

20090924_10_GBPJPY15.csv

Bu koca konunun 157 sayfasını okumak için fazla zaman ayıramadığım için üzgünüm (denedim ve başım döndü)

Şimdiden teşekkür ederim.
 
 
 
mladen:
Bunu böyle kullanın (mql iç içe işlevlere veya prosedürlere izin vermez, bu nedenle işlev veya prosedür ayrı olmalıdır)

Mükemmel çalışıyor, çok teşekkür ederim.

mladen:

Dosyaları herhangi bir yere kaydetme: evet, Windows API kullanılarak yapılabilir. İşte bunun nasıl yapılacağına dair iyi bir örnek ve iyi bir açıklama içeren bir link: WinAPI ile Dosya İşlemleri - MQL4 Makaleleri

Bunu öğreneceğim ve daha sonra kesinlikle bu konuya döneceğim.

Tanrı seni korusun.

 

"Yinelenen giriş": Programım neden çalışmıyor?

Üzgünüm: Bunu daha önce yayınladım, ancak Forum'daki gönderiyi yeniden yerleştiremiyorum.

(Ayrıca bilgisayar geçmişimdeki "yer imlerine" izin vermiyor...)

Her neyse: iki ardışık çubuğun "yukarı" veya "aşağı" olup olmadığını test eden basit bir prog yazdı.

Yani: "yukarı"da, çubuk1'deki yüksek, çubuk2'dekinden daha yüksektir ve çubuk 1'deki düşük

ayrıca bar2'den daha yüksektir. (Aşağı simetriktir.)

Prog, aralarla çalışır, bu nedenle "yukarı", bar1'in yüksek eksi düşük

bar2 bazı eşiğin üzerinde olmalıdır. ("Aşağı" simetriktir.)

Şimdi w/ M30 GBPUSD ile çalışıyor. Bu "kırılma eşiğini" göz küresi ile seçtim,

TakeProfit'te olduğu gibi. StopLoss, programda belirtildiği gibidir.

Yani: MetaTrader ve mql4 ile deneyim kazanmaya çalışmak.

Ardından, diğer progları deneyebilir, işleri optimize edebilir, vb.

Yani: prog'un derlenmesine kadar varın ve Strategy Tester'da çalıştırın.

Ancak, asla programın ikinci yarısına inmez veya bunu yazdırmaz.

sipariş girmiştir.

Tecrübeli biri için, sahip olduğum hata ne olursa olsun muhtemelen açıktır.

Benim için kendini belli etmiyor.

Yani: bu konuda yardımcı olabilir misiniz?

Teşekkürler.

Prog takip eder.

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

//| uzman başlatma işlevi |

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

int init()

{

//----

//----

dönüş(0);

}

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

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

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

int tanım()

{

//----

//----

dönüş(0);

}

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

//| uzman başlatma işlevi |

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

int başlangıç()

{

//----

bool TrendUp1; çift TakeProfitUp; çift EE = .00500;

bool OrdTot_OK;çift lot;çift slip;

double SL_Trailing_Up;bool High2Up;bool Low2Up;

int bilet yukarı;int bilet aşağı;bool DownAndBig; bool UpAndBig;

bool TrendDown; double SL_Trailing_Down;double TakeProfitDown;

bool High2down; bool Low2down;

int ABC = SiparişlerToplam();

double Size1 = .00630;bool BigUp; çift A = Yüksek[1];çift B= Düşük[2];

çift C= Yüksek[2]; double D= Low[1];bool BigDown;

//------------------------------------ aşağı sipariş başlangıcı

if (ABC == 0)// hiçbir sipariş doğru değilse

OrdTot_OK = doğru;

if (ABC == 0)// hiçbir sipariş doğru değilse

Yazdır ("sıfır sipariş sırasında, sipariş bitmedi");

if ((CD) > Size1)//high of 2 daha az low of 1 > .0063

BigDown = doğru;

if ((CD) > Size1)//high of 2 daha az low of 1 > .0063

Print ("sıralama sırasında, büyük bir kırılma bulundu");

if (Yüksek[1]< Yüksek[2])

High2down=doğru;

if (Yüksek[1]< Yüksek[2])

Yazdır ("aşağı sıralı sırayla, ardışık çubuklar azalan yükseklere sahiptir");

if(Düşük[1]< Düşük[2])

Low2down=doğru;

if(Düşük[1]< Düşük[2])

Yazdır ("aşağı sıralı sırayla, ardışık çubukların azalan düşükleri vardır");

if (Yüksek2düşük && Düşük2düşük)

TrendDown=doğru;

if (Yüksek2düşük && Düşük2düşük)

Yazdır ("aşağı sıra sırasına göre, TrendDown bayrağı ayarlanır");

eğer (TrendDown)

SL_Trailing_Down = Yüksek[1];

eğer (TrendDown)

Yazdır ("sıralama sırasında, stop_loss'u ayarladı");

eğer (TrendDown)

TakeProfitDown = Teklif - (.005);

eğer (TrendDown)

Yazdır ("aşağı sıralı sırayla, kâr elde etti", TakeProfitDown);

if (TrendDown && BigDown)

DownAndBig = doğru;

if (DownAndBig && OrdTot_OK)

biletdown= OrderSend(Symbol(),OP_SELL,lot, Bid,slip,SL_Trailing_Down,TakeProfitDown,Mavi);

if (DownAndBig && OrdTot_OK)

Yazdır ("sıralama sırasında, bir bilet girmeye çalıştı", bilet indirme);

if (bilet indirimi < 0)

Print("OrderSend_Down # hatasıyla başarısız oldu",GetLastError());

dönüş(0);

//------------------------------------------sırayla tamamlamak

//------------------------------------------------ --- yukarı sipariş başlangıcı

eğer (ABC == 0)

OrdTot_OK = doğru;

eğer (ABC == 0)

Yazdır ("yükselen sırada, hiçbir sipariş çıkmadı");

if ((A - B) > Boyut1)

BigUp = doğru;

if ((A - B) > Boyut1)

Yazdır ("yukarı sırayla, iki çubuk için boyut testi tamam");

if (Yüksek[1] > Yüksek[2])

High2Up = doğru;//44

if (Yüksek[1] > Yüksek[2])

Yazdır ("yükselen sırada, artan yüksekler için test tamam");

if(Düşük[1] > Düşük[2])

Low2Up=doğru;

if(Düşük[1] > Düşük[2])

Yazdır ("yükselen dizide, artan düşükler için test tamam");

if (High2Up && Low2Up)

TrendUp1=doğru;

if (High2Up && Low2Up)

Print ("yukarı sıraya göre, yukarı çıkmak için bayrağı ayarladım");

eğer (TrendUp1)

SL_Trailing_Up = Düşük[1] ;

eğer (TrendUp1)

Yazdır ("yukarı sırayla, stoploss belirlendi");

eğer (TrendUp1)

TakeProfitUp = Sor + (.005);

eğer (TrendUp1)

Yazdır ("yukarı sırayla, kâr almayı kurdu", TakeProfitUp);

if (TrendUp1 && BigUp)

UpAndBig = doğru;

if ( UpAndBig && OrdTot_OK)

ticketup = OrderSend(Symbol(), OP_BUY,lot, Ask,slip, SL_Trailing_Up,TakeProfitUp,Red);

if (UpAndBig && OrdTot_OK)

Yazdır ("yukarı sırayla, bir siparişte göndermeye çalıştı", bilet);

if (bilet < 0)

Print("OrderSend_Up # hatasıyla başarısız oldu",GetLastError());

dönüş(0);

//------------------------------------------------ -yukarı sipariş tamamlandı

//----

return(0);// bu satır gereksiz olabilir

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

//----

dönüş(0);

}

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

 

Birden çok ChaToStr kullanma????

İki kanatlı karakter yerleştirmek istiyorum. Biri diğerinin üstünde. Bu, ilk karakteri ayarlamak için kullandığım koddur -----ObjectSetText("signal"+x+"0",CharToStr(104),symbolSize,"Wingdings",Yellow);.

(236) eklemek ve bunun için farklı bir renk kullanmak istiyorum.

bunu yapmak mümkün mü? Eğer öyleyse, lütfen yardım edin.

Aradığınız için teşekkürler,

gever17

 

uyku | IsTradeContextMeşgul

CodeMasters'a ve diğer herkese selamlar!

Fraktallara dayalı bir EA'm var, 1 MT4 platformunda ve D1 zaman diliminde birden fazla döviz çiftinde kullanılıyor.

EA'nın birden fazla kopyası aynı anda işlem yaptığı için, Günlüğümde ''Ticaret Bağlamı Meşgul'' bildirimi alıyorum.

EA'ma Sleep veya IsTradeContextBusy işlevini eklemek istiyorum, ancak nereye koyacağımı bilmiyorum:

- Sipariş Gönder işlevinden sonra, Sat ve Al işlevi için ayrı ayrı mı?

- hem Sat hem de Al Gönder emri işlevinden sonra?

- bu problem nasıl çözülür - ile

if (IsTradeContextBusy() == true) Uyku (5000); dönüş;

???

Lütfen öneride bulunun veya beni çözüme yönlendirin.

Yardımın için çok teşekkürler,

İyi eğlenceler,

Simon

EA eklendi.

 

tavsiye gerekli!

Merhaba,

Bir programcının para kaybettiğim bir sorunla ilgili yardımını gerçekten takdir ediyorum. Sadece belirli bir fiyat seviyesinde pozisyon açması gereken bir EA'm var, ancak bazen testere çok fazla pozisyon açmasına neden oluyor. Sadece bir tane açılmasını istiyorum. Biri bana bunun bir satır kodla çözülebileceğini söyleyebilir mi yoksa bir programcı mı işe almam gerekiyor?

Teşekkür ederim.

 

lütfen reklam

Merhaba arkadaşlar, MagicNumber'ın nasıl çalıştığını gerçekten bilmiyorum, çünkü ÇALIŞMIYOR gibi görünüyor???? Ekli 2 basit EA yaptım, hala öğreniyorum.

1. Fiyat 100SMA'nın üzerindeyken satın alın

2. Fiyat da 100SMA'nın üzerindeyken sat

Bu, onları 2 farklı Eurusd grafiğine eklediğinizde, aynı anda bir Alış ve bir Satış yapması gerektiği anlamına gelir. Teori olarak, her EA bağımsız olarak çalışır.

Ama olmuyor... Sell 1'i gerçekleştirdiğinde, Buy EA çalışmayacak gibi görünüyor ve tam tersi.

Kontrol eden MagicNumber olan EA'mı herkes yeniden kodlayabilir mi? Herhangi bir yanlış var mı?

Çok teşekkürler

Dosyalar:
buy100ma.mq4  9 kb
sell100ma.mq4  9 kb
 
Ghosthand:
Merhaba arkadaşlar, MagicNumber'ın nasıl çalıştığını gerçekten bilmiyorum, çünkü ÇALIŞMIYOR gibi görünüyor???? Ekli 2 basit EA yaptım, hala öğreniyorum.

1. Fiyat 100SMA'nın üzerindeyken satın alın

2. Fiyat da 100SMA'nın üzerindeyken sat

Bu, onları 2 farklı Eurusd grafiğine eklediğinizde, aynı anda bir Alış ve bir Satış yapması gerektiği anlamına gelir. Teori olarak, her EA bağımsız olarak çalışır.

Ama olmuyor... Sell 1'i gerçekleştirdiğinde, Buy EA çalışmayacak gibi görünüyor ve tam tersi.

Kontrol eden MagicNumber olan EA'mı kimse yeniden kodlayabilir mi? Herhangi bir yanlış var mı?

Çok teşekkürler

Sihirli sayıyı doğru koymuşsun gibi görünüyor. Tek sorun, aynı sihirli numaraya sahip siparişin mevcut ticaret havuzunda olup olmadığını kontrol etmemenizdir. Tüm açık emirleri gözden geçirmeli ve yeni ticarete girmeden önce OrderMagicNumber() == Sihirli numaranız olup olmadığını kontrol etmelisiniz.