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

 
Maxim Kuznetsov :

if (time[i]>=time_m1 && time[i]<time_m1+PeriodSeconds(PERIOD_M1) {

  // время time[i] попало внутрь бара открытого в time_m1

}

İyi) bir ok, ancak bu koşula göre M15 ve üzeri üzerinde ok 21:00'a yerleştirilir.

 if (time[i]>= StringToTime ( "2019.04.22 20:55:00" ) && time[i]< StringToTime ( "2019.04.22 20:55:00" )+ Period ()* PeriodSeconds ( PERIOD_M1 ))

ve eğer sadece +PeriodSeconds( PERIOD_M1 ) Nokta ()* olmadan ise, o zaman hiç ayarlanmamıştır)

 
yiduwi :

İyi) bir ok, ancak bu koşula göre M15 ve üzeri üzerinde ok 21:00'a yerleştirilir.

ve eğer sadece +PeriodSeconds( PERIOD_M1 ) Nokta ()* olmadan ise, o zaman hiç ayarlanmamıştır)

Belgeleri zaten okuyun :-) Period() yalnızca geçerli dönemin kimliğini döndürür - neden onunla çarpıyorsunuz?

PERIOD_M1 (örnek olarak verilmiştir) yerine, PeriodSeconds( Period() ) öğesine iletilmelidir - o zaman mevcut periyodun 1 çubuğunda kaç saniye olduğunu göreceksiniz.

 
kopeyka2 :

İşte böyle bir "Bermuda paralel yüzlü" gizemi

Benim için çalışıyor :) Terminali açmayı/kapatmayı bile denedim.

Not: Artyom, beşteki soruyu dördüncü konuya taşıdın... Yanlışlıkla buldum.

 
kopeyka2 :


EMA hattı 20 23.04.2019 00:00

Çevrim içi bağlantı OLMADAN MT5'i açtığınızda, "array out ...." mesajı HEMEN belirir.

Hatalar değişir, ancak her zaman mevcuttur. Çevrimiçi üreyebilirler, ancak MT açıldığında daha sık bulunurlar.


İşte böyle bir "Bermuda paralel yüzlü" gizemi

Hata mesajı , hatanın oluştuğu satır numarasını içerir. Oradan kazmaya başlayın
 
Igor Zakharov :

Benim için çalışıyor :) Terminali açmayı/kapatmayı bile denedim.

Not: Artyom, beşteki soruyu dördüncü konuya taşıdın... Yanlışlıkla buldum.

Bu konu geneldir - burada sadece MQL4'e değil, aynı zamanda MQL5'e geçişe de yardımcı oluyoruz. Yani - konuyla ilgili.

 
Lütfen bana bir metin .csv dosyasından ticaret fiyatlarını alan Expert Advisor kodunu kavramsal olarak nasıl doğru yazacağımı söyleyin. Bu soru neden ortaya çıktı: EA, doğru anladıysam, her tıklamada, tamamen fileopen işlevindeki döngü tarafından okunan .csv dosyasındaki fiyatla mevcut fiyatı karşılaştıracaktır. Ancak dosya, geçen yıla ait 5000'den fazla satır içeriyor, her satırda enstrümanın adı, fiyatı, işlem türü (al/sat), giriş tarihi, emrin iptal tarihi yer alıyor. Her bir onay işaretini test ederken, danışman sipariş verme zamanının gelip gelmediğini anlamak için dosyanın tüm satırları arasında geçiş yapacaktır. Veya, test için, EA, iptal tarihi olan tüm emirleri başlatma sırasında bir kerede mi belirliyor ve gerçek ticaret için, her bir onay için sona erme süresine göre mevcut emirleri fiyattan kontrol ediyor mu? Belki tam olarak hayal edemiyorum, kaynaklar açısından ne kadar doğru veya başka seçenekler var (örneğin, grafik nesneler yapın ve mevcut fiyatı onlarla karşılaştırın, ancak yol boyunca bir döngü de var. ), anlamıyorum, lütfen tavsiye verin.
 

Merhaba!


MQL4 programlama ile ilgili video eğitimlerini indirin.

Derse göre bir danışman oluşturdum.

Ama ticaret yaparken, ne işe yaramaz.

Derleme sırasında herhangi bir hata yoktur.

Yolculuğun başında olduğum için hala bir hata bulmak zor.

Yapabilecek biri varsa lütfen yardım edin.

Teşekkür ederim!

kod:

/+----Giriş parametreleri----------------+

harici int BarCount=10;

harici int HourStart=14;

dış çift Lot = 0.1;

harici int StopLoss=120;

harici int TakeProfit=300;

harici int Magic=1456;

//+------------Genel değişkenler----------------+

çift minfiyat=999999,mp,

maksimum fiyat=-99999,SL,TP;

int bileti;

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

//| uzman başlatma işlevi |

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

int OnInit()

{

dönüş(INIT_SUCCESSED);

}

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

//| Uzman başlatmasızlaştırma işlevi |

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

geçersiz OnDeinit(const int nedeni)

{


}

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

//| Uzman onay işlevi |

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

geçersiz OnTick()

{

getminprice();

GetMaxFiyat();


if(TimeHour(TimeCurrent())==HourStart)

{

if(BuyLimitCount()&& BuyCount() ==0)

{

SL=NormalizeÇift(minfiyat-StopLoss*Puan,5);

TP=NormalizeÇift(minfiyat+Kar Al*Puan,5);

bilet=OrderSend(Symbol(),OP_BUYLIMIT,Lots,minprice,5,SL,TP,"",Magic,0,Mavi);

if(bilet<0)

Print("Satın alma limitini açarken BAŞARISIZ");

}

if(SellLimitCount()&& SellCount()==0)

{

SL=NormalizeÇift(maksimum fiyat+StopLoss*Puan,5);

TP=NormalizeÇift(maksimum-Fiyat Al*Puan,5);

bilet=OrderSend(Symbol(),OP_SELLLIMIT,Lots,maxprice,5,SL,TP,"",Magic,0,Red);

if(bilet<0)

Print("Satış limitini açarken BAŞARISIZ");

}

}



Comment("MinPrice: "+DoubleToStr(minprice,5)+"\n"+"MaxPrice: "+DoubleToStr(maxprice,5));


}

//+-BARCOUNT ÇUBUK SAYISI ÜZERİNDEKİ MİNİMUM FİYATI BELİRLEME FONKSİYONU

geçersiz GetMinPrice()

{

for(int i=0; i<BarCount; i++)

{

mp=iLow(Symbol(),PERIOD_CURRENT,i);

if(mp<minfiyat)

minfiyat=mp;

}

dönüş;

}

//+-BARCOUNT BAR SAYISI ÜZERİNDEKİ MAKSİMUM FİYATI BELİRLEME FONKSİYONU

geçersiz GetMaxPrice()

{

for(int i=0; i<BarCount; i++)

{

mp=iYüksek(Symbol(),PERIOD_CURRENT,i);

if(mp>maksimum fiyat)

maksimum fiyat=mp;

}

dönüş;

}

//+-AÇIK LİMİT ALIŞ SİPARİŞLERİNİN SAYISINI BELİRLEME FONKSİYONU

int BuyLimitCount()

{

int sayı=0;

for(int i=OrdersTotal()-1; i>=0; i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_BUYLIMIT)

{

say++;

}

}

dönüş(sayım);

}

//+-AÇIK Limit SATIŞ SİPARİŞLERİNİN SAYISINI BELİRLEME FONKSİYONU

int SellLimitCount()

{

int sayı=0;

for(int i=OrdersTotal()-1; i>=0; i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_SELLLIMIT)

{

say++;

}

}

dönüş(sayım);

}

//+-AÇIK PİYASA SATIN ALMA SİPARİŞLERİNİN SAYISINI BELİRLEME FONKSİYONU

int BuyCount()

{

int sayı=0;

for(int i=OrdersTotal()-1; i>=0; i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_BUY)

{

say++;

}

}

dönüş(sayım);

}

//+-AÇIK PİYASA SATIŞ EMİRLERİNİN SAYISINI BELİRLEME FONKSİYONU

int SatışSayısı()

{

int sayı=0;

for(int i=OrdersTotal()-1; i>=0; i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_SEL)

{

say++;

}

}

dönüş(sayım);

}

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


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

 

Serik29

Teşekkürler, bilgilerinizi bagajıma ekleyeceğim.

 
WinProject :
Lütfen bana bir metin .csv dosyasından ticaret fiyatlarını alan Expert Advisor kodunu kavramsal olarak nasıl doğru yazacağımı söyleyin. Bu soru neden ortaya çıktı: EA, doğru anladıysam, her tıklamada, tamamen fileopen işlevindeki döngü tarafından okunan .csv dosyasındaki fiyatla mevcut fiyatı karşılaştıracaktır. Ancak dosya, geçen yıla ait 5000'den fazla satır içeriyor, her satırda enstrümanın adı, fiyatı, işlem türü (al/sat), giriş tarihi, emrin iptal tarihi yer alıyor. Her bir onay işaretini test ederken, danışman sipariş verme zamanının gelip gelmediğini anlamak için dosyanın tüm satırları arasında geçiş yapacaktır. Veya, test için, EA, iptal tarihi olan tüm emirleri başlatma sırasında bir kerede mi belirliyor ve gerçek ticaret için, her bir onay için sona erme süresine göre mevcut emirleri fiyattan kontrol ediyor mu? Belki tam olarak hayal edemiyorum, kaynaklar açısından ne kadar doğru veya başka seçenekler var (örneğin, grafik nesneler yapın ve mevcut fiyatı onlarla karşılaştırın, ancak yol boyunca bir döngü de var. ), anlamıyorum, lütfen tavsiye verin.

genellikle bir dosyaya minimum sayıda okumaya (yazmaya) çalışırlar

göreviniz için, yükleme sırasında verileri bir diziye okumak (muhtemelen bir yapıya daha uygun olsa da) ve ardından mevcut fiyatların ve zamanın değerini dizi e-postalarıyla karşılaştırmak daha uygundur.

Not: kod tabanı araması "dosya" veya "csv" eskiden böyle hazır Uzman Danışmanlardı - dosyadan okurlar ve bu verilere göre işlem yaparlar

 
Igor Makanu :

genellikle bir dosyaya minimum sayıda okumaya (yazmaya) çalışırlar

göreviniz için, yükleme sırasında verileri bir diziye okumak (muhtemelen bir yapıya daha uygun olsa da) ve ardından mevcut fiyatların ve zamanın değerini dizi e-postalarıyla karşılaştırmak daha uygundur.

Not: kod tabanı araması "dosya" veya "csv" eskiden böyle hazır Uzman Danışmanlardı - dosyadan okurlar ve bu verilere göre işlem yaparlar

Çok teşekkürler istediğim cevabı aldım.