PDA

View Full Version : EA ve indicator yazanlar için basit bir tool - dll



Chess
14-08-2011, 19:34
Metatraderlar arası network üzerinden bilgi transferi için 2 komutluk basit bir dll yaptım.<br>Olur da bir kişi bile ilgilenirse seve seve paylaşırım.<br><br><br>A metatraderındaki bir EA/İnd bir değer set edebilsin diye<br><br>&nbsp;&nbsp; <span style="color: rgb(178, 34, 34);">string Sett(string key, string value, string client, string time);</span><br><br>şeklinde bir komut oluşturdum.<br>Diğer komut ta bunun karşılığı <br><br><span style="color: rgb(178, 34, 34);">&nbsp; string Gett (string key, string value, string client, string time);</span><br><br>şeklinde.<br><br>Mesela bir EA çalıştırıyorsunuz ve eurusd değerini kolluyorsunuz.<br>Farklı brokerın eurusd değerleri ne alemde diye check etmek isteyebilirsiniz.<br><br>O zaman B bilgisayarındaki (varsayalım oanda mt4) EA veya indikatörünüz her tickde<br><br>&nbsp; Sett ("EURUSD-B", ddeğer..,"oanda", datetimestr..) <br><br>şeklinde bir komut çalıştırsın.<br>O zaman A bilgisayarınızda<br><br>&nbsp; Gett ("EURUSD-B",str1,str2,datetimestr3 ); <br><br>komutu çalışınca (EA veya ind) str1 değişkenine oanda mt4 deki eurusd değerini almış olursunuz.<br>Nereden geldiği bilgisi için üçüncü parametre, hangi saat.dk.sn.ms değeri için de dördüncü parametreyi kullanabilirsiniz.<br>Farklı PC lerde aynı atomic clockları çalıştırırsanız milisaniye bazında bir hassasiyet almak mümkün olur.<br><br><br>Mantık olarak indeks niyetine bi key (string-ilk parametre) oluşturup bu key üzerinde oku yaz işlemleri yapmak.<br>İstediğiniz kadar key üzerinden istediğiniz kadar bilgi transferi yapabilmek için altyapı var.<br><br>Bir de depo mantığı yapıyorum son N adet değeri tutmak ve okumak için<br>GettN(...,...,...,..., Index) komutu ekleyerek de aynı keye ait Index inci değeri almak için.<br>Sadece eurusd diye key verip 5 mt4 den bilgi toplamak isterseniz, okuma yapan EA ya esneklik getirebilir belki.<br><br><br>Bir başka kullanum alanı da ticket no veya magic no lar olabilir.<br>İki ayrı pc ve iki ayrı ADSL hattında yedekli çalışırken poziyon kapamada örneğin,<br>key olarak "CLOSE" komutunu yazıp ikinci parametreye ise ticket no vs yüklersiniz.<br>Böylece çalışan her iki EA da bu tip key takipedip ilgili pozisyonu kapayabilir.<br><br><br>Bu hafta dynamic dns ayarı yapıp internet üzerinde ev-işyeri-işyeriy edek vs pc ler arası haberleşebilmesi için ekleme yapacağım<br><br><br>Bir de aynı mantığı <br>PushH (aynı 4 değişken)<br>PopP&nbsp;&nbsp; (.........&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br>PeekK (.....4 değişken.+, Index)<br><br>şeklinde assembler mantığı bufferlar versiyonu ekleyeceğim.<br>Pozisyon kapatmakta bu buffer sistemi daha başarılı olur.<br><br>Gett Sett mantığında mesela 10-15 indikatör çalıştıryorsunuz al sat kararı vermek için.<br>Her mt4 ancak tek bir threadde çalışır hız olarak sıkışacaktır.<br>indikatörleri farklı core ve/veya PC lere yayıp son durumlarını LONG/SHORT veya başka ara bilgileri paylaşmak için kullanılabilir.<br><br>Ana EA nız ise her tickte bu 10-15 indikatörün değerlerini dll aracılığı ile alıp gerekeni yapmak için kullanabilir.<br><br>Bol şans<br><br><br><br><br><br><br><br>

Chess
15-08-2011, 01:25
Metatraderlar arası network üzerinden bilgi transferi için 2 komutluk basit bir dll yaptım.
Olur da bir kişi bile ilgilenirse seve seve paylaşırım.
A metatraderındaki bir EA/İnd bir değer set edebilsin diye

string Sett(string key, string value, string client, string time);

şeklinde bir komut oluşturdum.
Diğer komut ta bunun karşılığı

string Gett (string key, string value, string client, string time);

Mesela bir EA çalıştırıyorsunuz ve eurusd değerini kolluyorsunuz.
Farklı brokerın eurusd değerleri ne alemde diye check etmek isteyebilirsiniz.
O zaman B bilgisayarındaki (varsayalım oanda mt4) EA veya indikatörünüz her tickde*

Sett ("EURUSD-B", ddeğer..,"oanda", datetimestr..)

şeklinde bir komut çalıştırsın.
O zaman A bilgisayarınızda

Gett ("EURUSD-B",str1,str2,datetimestr3 );

komutu çalışınca (EA veya ind) str1 değişkenine oanda mt4 deki eurusd değerini almış olursunuz.
Nereden geldiği bilgisi için üçüncü parametre, hangi saat.dk.sn.ms değeri için de dördüncü parametreyi kullanabilirsiniz.
Farklı PC lerde aynı atomic clockları çalıştırırsanız milisaniye bazında bir zaman bilgisi transferinde hassasiyet almak mümkün olur.

Bu komutlardaki ana mantık indeks niyetine bi key (string-ilk parametre) oluşturup bu key üzerinden oku yaz işlemleri yaparak bilgi paylaşmak.İstediğiniz kadar key üzerinden istediğiniz kadar bilgi transferi yapabilmek için altyapı var.

Bir de depo mantığı yapıyorum son N adet değeri tutmak ve okumak için

GettN(...,...,...,..., Index)

komutu ekleyerek de aynı keye ait Index inci değeri almak için.
Sadece eurusd diye key verip 5 mt4 den bilgi toplamak isterseniz, okuma yapan EA ya esneklik getirebilir belki.

Bir başka kullanım alanı da ticket no veya magic no lar olabilir.İki ayrı pc ve iki ayrı ADSL hattında yedekli çalışırken poziyon kapamada örneğin,key olarak "CLOSE" komutunu yazıp ikinci parametreye ise ticket no vs yüklersiniz.
Böylece çalışan trade kapatmakla yükümlü her iki EAda da bu tip key takip edilip ilgili pozisyon kapanabilir.

Bu hafta dynamic dns ayarı yapıp internet üzerinde ev-işyeri-işyeri yedek pc ler arası haberleşebilmesi için ekleme yapacağım.
Statik ip gerektirmemesi için.

Bir de aynı mantığı

PushH (aynı 4 değişken )
PopP (aynı 4 değişken )
PeekK (.....4 değişken.+ Index)

şeklinde assembler mantığı PUSH/POP bufferlar versiyonu ekleyeceğim.

Pozisyon kapatmakta bu buffer sistemini kullanmak daha pratik olur.

Gett Sett mantığında mesela 10-15 indikatör çalıştıryorsunuz al sat kararı vermek için.
Her mt4 ancak tek bir threadde çalışır hız olarak sıkışacaktır.
indikatörleri farklı core ve/veya PC lere yayıp son durumlarını LONG/SHORT veya başka ara bilgileri paylaşmak için kullanılabilir.

Böyle bir haberleşmede trade eden ana EA nız ise daha basitleşip,her tickte bu 10-15 indikatörün değerlerini dll aracılığı ile alıp sadece trade için gereken satırları ihtiva edebilir.
Bir sürü iCustom komutu kullanmakla uğraşmamış olunur.

Bol şans

Chess
15-08-2011, 01:39
Tek bir metatraderda ea/ind arası bilgi transferi yapmak için mq4 ün global değişkenlerini kullanabilirsiniz.
Helpinde bulabilirsiniz.
Değişken ismini de kendiniz oluşturuyosunuz.
Hatta Tools-->Global Variables penceresine geçerek değişken ismi ve bir değer atadığınız anda mq4 bu değişkeni anında değiştiriyor.
O sırada bu değişkene bakan bir EA/ind var ise ona da bu bilgi gitmiş oluyor.

Mesela "TRADEET" isimli bir değişkeni sıfıra eşitlersiniz.
Tools-->Global VAriables penceresini hazır tutup TRADEET değerine 1 yazıp enter ladığınız an bu EA nıza anında komut vermek için kullanılmış olur.
Benim yaptığım tool bir anlamda bu mekanizmanın pcler-internet arası genişletilmiş hali.

berked
15-08-2011, 05:51
Hocam selamlar,
bir kişi bile ilgilenirse seve seve paylaşırım demişsiniz.. de yaptıklarınız beni aşıyor.. :)
azcık anlarım mql4'ten, size sormak istediğim şeyler var sanırım.. hazır bilen birini bulmuşken.. :he:
lakin şimdi yatma vakti.. kafayı toparlayıp yazayım yarın öbür gün..

saygılar sunuyorum.. tebrik ederim ayrıca..

alper0680
24-08-2011, 04:10
Sn Chess ; Merhabalar bende şu konuda yardım isteyeyim ; metatrader4 üzerinde oluşturduğum bir sistem var . bu sistemi ticari olarak pazarlamak istiyorum. Malumunuz millet uyanık sistem için oluşturduğumuz ex4 dosyalarını depomier programıyla mql formatına çeviriyor sonrasında dll ile ilgili kısımları silerek istediği gibi kullanabiliyor bunun önüne geçmek mümkünmüdür nasıl yapılabilir.

Şimdiden teşekkür ederim

Chess
29-08-2011, 13:05
doğru
Sn Chess ; Merhabalar bende şu konuda yardım isteyeyim ; metatrader4 üzerinde oluşturduğum bir sistem var . bu sistemi ticari olarak pazarlamak istiyorum. Malumunuz millet uyanık sistem için oluşturduğumuz ex4 dosyalarını depomier programıyla mql formatına çeviriyor sonrasında dll ile ilgili kısımları silerek istediği gibi kullanabiliyor bunun önüne geçmek mümkünmüdür nasıl yapılabilir.

Şimdiden teşekkür ederim

Sn alper0680, programınızın bir kısmını dll içine taşıyarak dll i mecburi hale getirebilirsiniz.
Mesela dll den geri gelen değişken değerleri olmadan sistem düzgün çalışmazsa bu yöntem işinize yarayabilir.

kose
05-09-2011, 09:59
Merhaba ,
Mt4 ile ilgili bir sorum olacak size. mt4 de bir ea yazmaya çalışıyorum. istediğim bar kapanışına göre oluşacak değere göre işlem yapmak. değeri alırken "PRICE_CLOSE" kullanıyorum. Bir Önceki id değerini okutmak için shift değerini bir yapıyorum. ama yinede aynı bar içinde oluşan değişimler işlem yaptırıyor. Şöyleki indikatorün bir önceki değeri örneğin 101 ve şu anki değeri 99 olunca işlem yapsın istiyorum. bunu yazıyorum yapıyor. ancak bar kapanışı değil her bir işlemde bu değerler değişiyor. aynı bar içinde 101 den 99a düşünce bu işlemi yine yapıyor. bunu bar kapanışlarına göre nasıl ayarlayabilirim acaba, bilginiz var mı bu konuda

Chess
12-09-2011, 16:43
SSayın kose,

int IndicatorCounted( ) fonksiyonunun helpini ve BArs değişkeninin helpini incelerseniz oradan bir yöntem çıkarabilirsiniz.
İndirdiğiniz indikatörlerdeki sourcelarda start() procunun başlarında yeni bir bar eklenip eklenmediğini check ederler.
O sourcelar da yardımcı olacaktır.

İşleyiş olarak her tick geldiğinde start() procu bir kere için çalışır.
Siz barın bitmesini bekliyorsuınuz anladığım kadarı ile.
Dolayısı ile bar sayısı değiştiğinde sondan bir önceki (yani sıfır değil) "1" birinci değer sizin aradığınız son kapanış barının indeksini verecek.

kose
13-09-2011, 16:56
SSayın kose,

int IndicatorCounted( ) fonksiyonunun helpini ve BArs değişkeninin helpini incelerseniz oradan bir yöntem çıkarabilirsiniz.
İndirdiğiniz indikatörlerdeki sourcelarda start() procunun başlarında yeni bir bar eklenip eklenmediğini check ederler.
O sourcelar da yardımcı olacaktır.

İşleyiş olarak her tick geldiğinde start() procu bir kere için çalışır.
Siz barın bitmesini bekliyorsuınuz anladığım kadarı ile.
Dolayısı ile bar sayısı değiştiğinde sondan bir önceki (yani sıfır değil) "1" birinci değer sizin aradığınız son kapanış barının indeksini verecek.
ilk olarak bende bars ile düşündüm ama daha kolayı time fonk ile bunu yapmak oldu. CurTime ile Time[0] eşit olmasından faydalandım.buna göre bir şeyler oluşturmaya çalışıyorum. Ancak yine de shift değerlerinde bir sorunum var. vakit buldugumda inceleyecegim.

Chess
18-09-2011, 22:48
ilk olarak bende bars ile düşündüm ama daha kolayı time fonk ile bunu yapmak oldu. CurTime ile Time[0] eşit olmasından faydalandım.buna göre bir şeyler oluşturmaya çalışıyorum. Ancak yine de shift değerlerinde bir sorunum var. vakit buldugumda inceleyecegim.

void start()
{
static datetime tmp;
if (tmp != Time[0]) { tmp = Time[0];
//do ur code here
}
}


http://codebase.mql4.com/7681 adresinden alıntı
Yeni bir barın oluştuğunu gösteren basit bir yöntem.
tmp değerinin değişmesi yenibir bar geldiğini göstermek açısından yeterli

Son bar otomatik olarak sıfırıncı oluyor.
Bir önceki dakikaya ait olan bar ise artık sıfır yerine birinci.
dolayısı ile tüm barların shift değerleri buna göre "birer" artmış oluyor.

Bilmiyorum yaşadığınız sorun bu mantıkla mı ilgili ?

ordi
11-12-2011, 16:06
Sn. Chess Matriks'te kullanmakta olduğum (veya tam tersi) özel bir indiği nasıl MT4 kullanabilirim.

Chess
25-12-2011, 18:06
Sn. Chess Matriks'te kullanmakta olduğum (veya tam tersi) özel bir indiği nasıl MT4 kullanabilirim.

Farklı lisanlarda yazılmışlardır aktarma olanağı yok.
Metatrader için binlerce indikatörü (açık kod olarak) internette bulabilirsiniz.
Matriksde kullandığınız indikatörün aynısını büyük ihtimalle mt4 olarak bulabilirsiniz.

tat
17-07-2012, 13:37
beyler elimde bir sistem var ex4 formatinda
sinyal sistemi
ben bu sistemi alirken arkadas benim account numarami istedi ve o numaraya kilitledi indicatorleri sureli olarak
simdi ben bu sistemi demo da fln denemek istedigimde calismiyor
bu sistemi her hesapta kullanilabilir sekilde ve suresiz olarak duzenliyebilecek bir arkadas var mi forumda veya yardimi dokunacak birine de yonlendirebilirsiniz.