Merhaba, söyle bana, pliz, neden çalışmıyor. Hata yoktur, ancak test cihazında siparişler açılmaz. Eğitim olarak günlük bir mumun yüksek, düşük kırılımı için bir danışman yazmaya çalışıyorum.
externint TimeCandle = 1440 ; //таймфрейм свечи, которую пробиваем externint HourStart= 10 ; // час начала торговлиexterndouble Lots= 0.1 ; // лот торговли externint StopLoss= 100 ; // стоплоссexternint TakeProfit= 100 ; // тайкпрофитexternint znak= 5 ; // количество знаков котировкиexternint magik= 54321 ; // магик double minprice; // минимальная ценаdouble maxprice; // максимальная ценаvoidOnTick ()
{
double SL, TP;
int ticket;
minprice = iLow ( Symbol (),TimeCandle, 1 );
maxprice = iHigh ( Symbol (),TimeCandle, 1 );
if (TimeHour( TimeCurrent ()==HourStart))
{
if (BuyLimitCount()== 0 && BuyCount()== 0 ) //если нет ордера то пытаться открыть
{
SL = NormalizeDouble (maxprice - StopLoss* Point ,znak);
TP = NormalizeDouble (maxprice + TakeProfit* Point ,znak);
ticket = OrderSend ( Symbol (), OP_BUYLIMIT,Lots,maxprice, 10 , SL,TP, "" , magik, 0 ,Blue);
if (ticket < 0 )
Print ( "Не удалось открыть ордер на покупку" );
}
if (SellLimitCount()== 0 && SellCount()== 0 ) //если нет ордера то пытаться открыть
{
SL = NormalizeDouble (minprice + StopLoss* Point ,znak);
TP = NormalizeDouble (minprice - TakeProfit* Point ,znak);
ticket = OrderSend ( Symbol (), OP_SELLLIMIT,Lots,minprice, 10 , SL,TP, "" , magik, 0 ,Red);
if (ticket < 0 )
Print ( "Не удалось открыть ордер на продажу" );
}
}
Comment ( "Минимальная цена:" + DoubleToStr(minprice,znak) + "\n" + "Максимальная цена:" + DoubleToStr(maxprice, znak));
}
// проверяем есть ли байлимит ордера с концаint BuyLimitCount()
{
int count = 0 ;
for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
{
if ( OrderSelect (i, SELECT_BY_POS,MODE_TRADES) == true &&
OrderMagicNumber()== magik &&
OrderType() == OP_BUYLIMIT )
{
count ++;
}
}
return (count);
}
// проверяем есть ли селллимит ордера с концаint SellLimitCount()
{
int count = 0 ;
for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
{
if ( OrderSelect (i, SELECT_BY_POS,MODE_TRADES) == true &&
OrderMagicNumber()== magik &&
OrderType() == OP_SELLLIMIT )
{
count ++;
}
}
return (count);
}
// проверяем есть ли бай ордера с концаint BuyCount()
{
int count = 0 ;
for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
{
if ( OrderSelect (i, SELECT_BY_POS,MODE_TRADES) == true &&
OrderMagicNumber()== magik &&
OrderType() == OP_BUY )
{
count ++;
}
}
return (count);
}
// проверяем есть ли селл ордера с концаint SellCount()
{
int count = 0 ;
for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
{
if ( OrderSelect (i, SELECT_BY_POS,MODE_TRADES) == true &&
OrderMagicNumber()== magik &&
OrderType() == OP_SELL )
{
count ++;
}
}
return (count);
}
Для разработки торговых систем в платформу встроен собственный язык программирования MetaQuotes Language 5 (MQL5), среда разработки MetaEditor и инструменты тестирования стратегий. Любую информацию о разработке торговых стратегий на языке MQL5 можно найти на официальном сайте MQL5.community. На этом же сайте в разделе Code Base могут быть...
Merhaba, söyle bana, pliz, neden çalışmıyor. Hata yoktur, ancak test cihazında siparişler açılmaz. Eğitim olarak günlük bir mumun yüksek, düşük kırılımı için bir danışman yazmaya çalışıyorum.
Açılmıyor - anlamda ve denemiyor veya deniyor ama çalışmıyor mu? Dergide ne yazıyorlar?
Merhaba, söyle bana, pliz, neden çalışmıyor. Hata yoktur, ancak test cihazında siparişler açılmaz. Eğitim olarak günlük bir mumun yüksek, düşük kırılımı için bir danışman yazmaya çalışıyorum.
Bu ifadeyi analiz et
if (TimeHour( TimeCurrent ()==HourStart))
{
........
}
Bu ifadenin anlamını anlamak benim için zor, belki yanılıyorum ama en azından "( TimeCurrent()==HourStart) " ifadesini "( TimeCurrent() - HourStart) " ile değiştirin.
Ayrıca eğer sizi doğru anladıysam BuyLimitOrder ve BuyPosition yoksa BuyLimit emri vermeye çalışıyorsunuz. "ve" ye dikkat edin. Yani, bunlardan herhangi birinin varlığı size ayrı ayrı uygundur, bu nedenle, mevcut fiyatın istediğiniz pozisyonu ile, en az biri çalışana ve ilk pozisyon olana kadar, her bir tıklamada bir tane olmak üzere sonsuz sayıda ByLimit alacaksınız. açıldı. Ayrıca - fiyatın şimdi nerede olduğu umurunuzda değil. Garip zaman koşulu yerine getirilir getirilmez (yazının hemen üstünde), bir hata olduğunu düşünüyorum ama neyse. Dolayısıyla, bunu hesaba katmazsanız, sipariş vermek için fiyat olarak Dünün en yüksek değerini kullandığınızdan, danışman ilk tıklamadan fiyat dünün en yüksek seviyesinin üzerine çıkana kadar hatalı siparişler vermeye başlayacaktır. BuyLimit, mevcut fiyatın altına ayarlanır, bu, mevcut fiyatın dünün en yüksek değerinden daha yüksek olması gerektiği ve o zamana kadar yürütmeyi reddetme olacağı anlamına gelir.
Bu nedenle, fiyat dünün zirvesinin üzerine çıktığında, Satın Alma Limiti olmadığında ve açık alım olmadığında sadece durum sizin için uygundur. Oldukça nadir bir kombinasyon. Ayrıca, kırılmaz, ancak kırılmadan sonra geri döner (çünkü ByLIMIT) ve ayrıca, ilk tikten başlayarak, dünün en yüksek fiyatının üzerine uzun bir süre boyunca size hatalar atar (bu başka bir hatadır) . Koşul zaten karşılandı, danışman bir emir gönderir, ancak hala bir yayılma, piyasadan izin verilen minimum mesafe vb.
Bu ifadenin anlamını anlamak benim için zor, belki yanılıyorum ama en azından "( TimeCurrent()==HourStart) " ifadesini "( TimeCurrent() - HourStart) " ile değiştirin.
Doğru, burada bir hata var. Gerekiyor if (TimeHour( TimeCurrent() )==HourStart)
Şimdi bazen işlemleri açar, ancak daha fazla hata verir (OrderSend hatası 130).
Bunun doğru bir karar olduğunu düşünmüyorum. Muhtemelen bir şeyi kaçırdım. Lütfen çözmeme yardım et.
Dosyalarla çalışma konusundaki bu "yanlış kararı" nihayet düzeltmeleri için Microsoft tarafından acilen işe alınmanız gerekiyor.
Dosyalarla çalışmak, bir dosya düzenleyicide bir dosyayı düzenlemekle aynı şey değildir, daha çok tek tek harflerle küplerden bir kelime oluşturmaya benzer. Yeni bir harf eklemeniz gerekiyorsa, onu takip eden tüm küpler sağa kaydırılmalıdır. Eski harfi kaldırmak istiyorsanız, onu takip eden tüm küpler sola taşınmalıdır. Bu nedenle, dosya büyük değilse ve çalışmanın bir parçası olarak dosyaya paylaşılan erişim gerekli değilse, o zaman gerçekten de yeni bir dosyaya veri yazmak, eskisini silmek, yeni dosyayı isimle yeniden adlandırmak daha kolaydır. eskisinden.
Yanılmıyorsam, dosyalarla çalışırken MQL'de eksik olan tek şey dosya uzunluğunu gerekli boyuta kesebilme yeteneğidir.
Dosyalarla çalışma konusundaki bu "yanlış kararı" nihayet düzeltmeleri için Microsoft tarafından acilen işe alınmanız gerekiyor.
Dosyalarla çalışmak, bir dosya düzenleyicide bir dosyayı düzenlemekle aynı şey değildir, daha çok tek tek harflerle küplerden bir kelime oluşturmaya benzer. Yeni bir harf eklemeniz gerekiyorsa, onu takip eden tüm küpler sağa kaydırılmalıdır. Eski harfi kaldırmak istiyorsanız, onu takip eden tüm küpler sola taşınmalıdır. Bu nedenle, dosya büyük değilse ve çalışmanın bir parçası olarak dosyaya paylaşılan erişim gerekli değilse, o zaman gerçekten de yeni bir dosyaya veri yazmak, eskisini silmek, yeni dosyayı isimle yeniden adlandırmak daha kolaydır. eskisinden.
Yanılmıyorsam, dosyalarla çalışırken MQL'de eksik olan tek şey dosya uzunluğunu gerekli boyuta kesebilme yeteneğidir.
Teşekkür ederim. İyi açıklama. Maalesef dosyam çok büyük ve bu nedenle "küpler" ile çalışmak zorundayım.
Merhaba, söyle bana, pliz, neden çalışmıyor. Hata yoktur, ancak test cihazında siparişler açılmaz. Eğitim olarak günlük bir mumun yüksek, düşük kırılımı için bir danışman yazmaya çalışıyorum.
Merhaba, söyle bana, pliz, neden çalışmıyor. Hata yoktur, ancak test cihazında siparişler açılmaz. Eğitim olarak günlük bir mumun yüksek, düşük kırılımı için bir danışman yazmaya çalışıyorum.
Açılmıyor - anlamda ve denemiyor veya deniyor ama çalışmıyor mu? Dergide ne yazıyorlar?
Merhaba, söyle bana, pliz, neden çalışmıyor. Hata yoktur, ancak test cihazında siparişler açılmaz. Eğitim olarak günlük bir mumun yüksek, düşük kırılımı için bir danışman yazmaya çalışıyorum.
Bu ifadeyi analiz et
Bu ifadenin anlamını anlamak benim için zor, belki yanılıyorum ama en azından "( TimeCurrent ()==HourStart) " ifadesini "( TimeCurrent () - HourStart) " ile değiştirin.
Ayrıca eğer sizi doğru anladıysam BuyLimitOrder ve BuyPosition yoksa BuyLimit emri vermeye çalışıyorsunuz. "ve" ye dikkat edin. Yani, bunlardan herhangi birinin varlığı size ayrı ayrı uygundur, bu nedenle, mevcut fiyatın istediğiniz pozisyonu ile, en az biri çalışana ve ilk pozisyon olana kadar, her bir tıklamada bir tane olmak üzere sonsuz sayıda ByLimit alacaksınız. açıldı. Ayrıca - fiyatın şimdi nerede olduğu umurunuzda değil. Garip zaman koşulu yerine getirilir getirilmez (yazının hemen üstünde), bir hata olduğunu düşünüyorum ama neyse. Dolayısıyla, bunu hesaba katmazsanız, sipariş vermek için fiyat olarak Dünün en yüksek değerini kullandığınızdan, danışman ilk tıklamadan fiyat dünün en yüksek seviyesinin üzerine çıkana kadar hatalı siparişler vermeye başlayacaktır. BuyLimit, mevcut fiyatın altına ayarlanır, bu, mevcut fiyatın dünün en yüksek değerinden daha yüksek olması gerektiği ve o zamana kadar yürütmeyi reddetme olacağı anlamına gelir.
Bu nedenle, fiyat dünün zirvesinin üzerine çıktığında, Satın Alma Limiti olmadığında ve açık alım olmadığında sadece durum sizin için uygundur. Oldukça nadir bir kombinasyon. Ayrıca, kırılmaz, ancak kırılmadan sonra geri döner (çünkü ByLIMIT) ve ayrıca, ilk tikten başlayarak, dünün en yüksek fiyatının üzerine uzun bir süre boyunca size hatalar atar (bu başka bir hatadır) . Koşul zaten karşılandı, danışman bir emir gönderir, ancak hala bir yayılma, piyasadan izin verilen minimum mesafe vb.
Bu ifadenin anlamını anlamak benim için zor, belki yanılıyorum ama en azından "( TimeCurrent ()==HourStart) " ifadesini "( TimeCurrent () - HourStart) " ile değiştirin.
Doğru, burada bir hata var. Gerekiyor if (TimeHour( TimeCurrent() )==HourStart)
Şimdi bazen işlemleri açar, ancak daha fazla hata verir (OrderSend hatası 130).
Limit emirlerine gelince, bu doğru değil.
Doğru, burada bir hata var. Gerekiyor if (TimeHour(TimeCurrent())==HourStart)
Şimdi bazen işlemleri açar, ancak daha fazla hata verir (OrderSend hatası 130).
Limit emirlerine gelince, bu doğru değil.
İşte zamanla çalışmanız için bir komut dosyası.
Eski ama düzgün çalışıyor.
Merhaba.
Senden dosyalarla nasıl çalışacağımı anlamama yardım etmeni istiyorum.
Program çalışırken, alınan verileri bir dosyaya kaydedip CSV'yi okuyorum.
Dosya büyüyor. hız düşer. Satırlardaki bazı öğeleri güncellemeye (yeniden yazmaya) çalıştı. İşe yaramadı!
Seçilen satırı silmek imkansız! Eski dizeye yeni öğe eklenemiyor!
Çok ilginç! Bir dosyayı, grafik nesnesini vb. kolayca silebilirsiniz . Ve oluşturulan dosyayla çalışmaya gelince, tam bir çıkmaz sokak!
Forumlarda sadece bir öneri var: "Dosyayı hafızaya oku, satırı değiştir ya da sil ve yeni dosyayı eski isimle kaydet."
Bunun doğru bir karar olduğunu düşünmüyorum. Muhtemelen bir şeyi kaçırdım. Lütfen çözmeme yardım et.
Bunun doğru bir karar olduğunu düşünmüyorum. Muhtemelen bir şeyi kaçırdım. Lütfen çözmeme yardım et.
Dosyalarla çalışma konusundaki bu "yanlış kararı" nihayet düzeltmeleri için Microsoft tarafından acilen işe alınmanız gerekiyor.
Dosyalarla çalışmak, bir dosya düzenleyicide bir dosyayı düzenlemekle aynı şey değildir, daha çok tek tek harflerle küplerden bir kelime oluşturmaya benzer.
Yeni bir harf eklemeniz gerekiyorsa, onu takip eden tüm küpler sağa kaydırılmalıdır.
Eski harfi kaldırmak istiyorsanız, onu takip eden tüm küpler sola taşınmalıdır.
Bu nedenle, dosya büyük değilse ve çalışmanın bir parçası olarak dosyaya paylaşılan erişim gerekli değilse, o zaman gerçekten de yeni bir dosyaya veri yazmak, eskisini silmek, yeni dosyayı isimle yeniden adlandırmak daha kolaydır. eskisinden.
Yanılmıyorsam, dosyalarla çalışırken MQL'de eksik olan tek şey dosya uzunluğunu gerekli boyuta kesebilme yeteneğidir.
İşte zamanla çalışmanız için bir komut dosyası.
Eski ama düzgün çalışıyor.
Daha önce Kimovskaya fonksiyonunu da kullandım, sonra kendime şöyle yazmaya vakit buldum:
çalışma süresini devre dışı bırak - yapıcıyı başlatırken yanlış veri girmeniz gerekir, örneğin 25 saat veya 70 dakikaDosyalarla çalışma konusundaki bu "yanlış kararı" nihayet düzeltmeleri için Microsoft tarafından acilen işe alınmanız gerekiyor.
Dosyalarla çalışmak, bir dosya düzenleyicide bir dosyayı düzenlemekle aynı şey değildir, daha çok tek tek harflerle küplerden bir kelime oluşturmaya benzer.
Yeni bir harf eklemeniz gerekiyorsa, onu takip eden tüm küpler sağa kaydırılmalıdır.
Eski harfi kaldırmak istiyorsanız, onu takip eden tüm küpler sola taşınmalıdır.
Bu nedenle, dosya büyük değilse ve çalışmanın bir parçası olarak dosyaya paylaşılan erişim gerekli değilse, o zaman gerçekten de yeni bir dosyaya veri yazmak, eskisini silmek, yeni dosyayı isimle yeniden adlandırmak daha kolaydır. eskisinden.
Yanılmıyorsam, dosyalarla çalışırken MQL'de eksik olan tek şey dosya uzunluğunu gerekli boyuta kesebilme yeteneğidir.