"Yeni Başlayanlar için MQL5’te Uzman Danışman Yazmak İçin Adım Adım Açıklamalı Kılavuz" makalesi için tartışma - sayfa 29
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
Herkese merhaba,
Şu anda Samuel'in EA'sı bir demo hesabında çalışıyor ve oldukça memnunum. İyi programlama!
Zaman zaman iyi ticaret gösteriyor, ancak bir zayıflığı var:
SAT seçenekleri, grafiklerin vadisindeki dönüm noktalarında yığılıyor ve aynı şey AL seçenekleriyle karşılık gelen zirvelerde de oluyor, bu da önce kitaplara negatif olarak büyük ölçüde çarpıyor. Bunu yeniden programlamak istiyorum, yani gün içinde AL'lar, zirvede SAT'lar ve şimdiye kadarki girişimlerim başarısız oldu. Ayrıca MQL5 hakkında sadece ilkel bir bilgiye sahibim.
Biri bana yardım edebilir mi?
SG ve çok teşekkürler!
Bu genellikle işe yaramaz çünkü EA'nın karlı bir pozisyon aldığı diğer noktalar da tersine çevrilir ....
Ama bunu okuyun:
EA-freelancer özellikleri : https://www.mql5.com/tr/articles/4368
Indi : https://www.mql5.com/tr/articles/4304
MQL5 ve MQL4'te Ticaret Robotu Nasıl Sipariş Edilir : https://www.mql5.com/tr/articles/117
Buradaki ipuçlarıyla fikrinizi daha kesin bir şekilde belirtebilir, işe yarayıp yaramadığını görmek için ya da birinden ücretli ya da ücretsiz olarak yapmasını isteyebilirsiniz.
Herkese merhaba (Özellikle sevgili yazara)
Bu makale ile birlikte kodladım. Çok keyif aldım ve çok şey öğrendim.
Böyle bilgilendirici bir makale yazdığınız için teşekkür ederim.
Ancak bir sorunum var. EA'm herhangi bir sipariş vermedi. Yazarın kodunu indirdim ama o da herhangi bir emir vermedi.
Makale 13 yaşında olduğu için kodun artık güncelliğini yitirdiğini varsayıyorum. Biri bana yardım edebilir mi?
Kodum aşağıdaki dosyada. Şimdiden herkese teşekkürler.
Merhaba, sizi acemi olduğum konusunda uyarmak istiyorum, bu yüzden çok fazla küfür etmeyin)
Oluşturucu aracılığıyla bir Uzman Danışman oluşturmak istedim (ve her şey yolunda görünüyor, ancak bir ama var)
Bir önceki kapanıştan hemen sonra değil, örneğin bir mumdan sonra bir anlaşma açmak istiyorum,
Bir şeyler yazmaya çalıştım ama sonunda hata verdi.
Bu konuda yardımcı olabilecek veya hatanın ne olduğunu ve nasıl düzeltileceğini belirtebilecek biri var mı?
ve işte gerçek kod:
//+------------------------------------------------------------------+
//| ParExpert.mq5 |
//| Telif Hakkı 2022, MetaQuotes Ltd. | |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Telif Hakkı 2022, MetaQuotes Ltd."
#property link"https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Dahil et |
//+------------------------------------------------------------------+
#include <Uzman\Uzman.mqh>
//--- mevcut sinyaller
#include <Uzman\Sinyal\SinyalSAR.mqh>
//--- kullanılabilir son
#include <Expert\Trailing\TrailingFixedPips.mqh>
//--- mevcut para yönetimi
#include <Expert\Money\MoneyFixedLot.mqh>
//+------------------------------------------------------------------+
//| Girişler |
//+------------------------------------------------------------------+
//--- Uzman için girdiler
input string Expert_Title = "ParExpert"; // Belge adı
ulong Expert_MagicNumber = 24195; //
bool Expert_EveryTick = false; //
//--- ana sinyal için girişler
giriş int Signal_ThresholdOpen = 10; // Açılacak sinyal eşik değeri [0...100]
input int Signal_ThresholdClose = 0; // Kapatılacak sinyal eşik değeri [0...100]
input double Signal_PriceLevel = 0.0; // Bir anlaşma gerçekleştirmek için fiyat seviyesi
input double Signal_StopLevel = 500; // Zararı Durdur seviyesi (puan olarak)
input double Signal_TakeLevel = 70; // Kar alma seviyesi (puan olarak)
input int Signal_Expiration = 4; // Bekleyen emirlerin sona ermesi (çubuk cinsinden)
input double Signal_SAR_Step = 0.02; // Parabolik SAR(0.02,0.2) Hız artışı
input double Signal_SAR_Maximum = 0.2; // Parabolik SAR(0.02,0.2) Maksimum oran
input double Signal_SAR_Weight = 0.6; // Parabolik SAR(0.02,0.2) Ağırlık [0...1.0]
//--- sondaki için girdiler
input int Trailing_FixedPips_StopLevel = 0; // Zararı Durdurma takip seviyesi (puan olarak)
input int Trailing_FixedPips_ProfitLevel= 10; // Kar alma takip seviyesi (puan olarak)
//--- para için girdiler
input double Money_FixLot_Percent = 10.0; // Yüzde
input double Money_FixLot_Lots = 0.1; // Sabit hacim
//--- ticaret bekleme süresi için girdiler
input int Expert_TradeCooldown = 1; // İşlemler arasındaki bekleme süresi (çubuk cinsinden)
//+------------------------------------------------------------------+
//| Küresel uzman nesnesi |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Uzmanın başlatma fonksiyonu |
//+------------------------------------------------------------------+
int OnInit()
{
//--- Uzman başlatılıyor
if (!ExtExpert.Init(Symbol(), Period(), Expert_EveryTick, Expert_MagicNumber))
{
//--- başarısız
printf(__FUNCTION__ + ": uzman başlatılırken hata oluştu");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- Sinyal oluşturuluyor
CExpertSignal *signal = new CExpertSignal;
if (signal == NULL)
{
//--- başarısız
printf(__FUNCTION__ + ": sinyal oluşturma hatası");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//---
ExtExpert.InitSignal(signal);
signal.ThresholdOpen(Signal_ThresholdOpen);
signal.ThresholdClose(Signal_ThresholdClose);
signal.PriceLevel(Signal_PriceLevel);
signal.StopLevel(Signal_StopLevel);
signal.TakeLevel(Signal_TakeLevel);
signal.Expiration(Signal_Expiration);
//--- CSignalSAR filtresi oluşturma
CSignalSAR *filter0 = yeni CSignalSAR;
if (filter0 == NULL)
{
//--- başarısız
printf(__FUNCTION__ + ": filter0 oluşturulurken hata oluştu");
ExtExpert.Deinit();
return (INIT_FAILED);
}
signal.AddFilter(filter0);
//--- Filtre parametrelerini ayarlayın
filter0.Step(Signal_SAR_Step);
filter0.Maximum(Signal_SAR_Maximum);
filter0.Weight(Signal_SAR_Weight);
//--- Sondaki nesnenin oluşturulması
CTrailingFixedPips *trailing = new CTrailingFixedPips;
if (trailing == NULL)
{
//--- başarısız
printf(__FUNCTION__ + ": error creating trailing");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- Uzmana son ekleme (otomatik olarak silinecektir))
if (!ExtExpert.InitTrailing(trailing))
{
//--- başarısız
printf(__FUNCTION__ + ": error initialising trailing");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- Sondaki parametreleri ayarlayın
trailing.StopLevel(Trailing_FixedPips_StopLevel);
trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel);
//--- Para nesnesinin oluşturulması
CMoneyFixedLot *money = new CMoneyFixedLot;
if (money == NULL)
{
//--- başarısız
printf(__FUNCTION__ + ": para oluştururken hata oluştu");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- Uzmana para ekleyin (otomatik olarak silinecektir))
if (!ExtExpert.InitMoney(para))
{
//--- başarısız
printf(__FUNCTION__ + ": para başlatılırken hata oluştu");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- Para parametrelerini ayarlayın
money.Percent(Money_FixLot_Percent);
money.Lots(Money_FixLot_Lots);
//--- Tüm ticaret nesneleri parametrelerini kontrol edin
if (!ExtExpert.ValidationSettings())
{
//--- başarısız
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- Gerekli tüm göstergelerin ayarlanması
if (!ExtExpert.InitIndicators())
{
//--- başarısız
printf(__FUNCTION__ + ": error initialising indicators");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- Son işlem zamanı değişkenini başlatın
datetime lastTradeTime = 0;
ExtExpert.SetVariable("LastTradeTime", lastTradeTime);
//--- tamam
return (INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Uzmanın başlangıçtan çıkarma işlevi |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ExtExpert.Deinit();
}
//+------------------------------------------------------------------+
//| "Tik" olay işleyici işlevi |
//+------------------------------------------------------------------+
void OnTick()
{
//--- Son işlemden bu yana geçen süreyi kontrol edin
datetime lastTradeTime = ExtExpert.GetVariable("LastTradeTime");
int cooldownBars = Bars - ExtExpert.GetBarShiftByTime(Symbol(), Period(), lastTradeTime);
if (cooldownBars < Expert_TradeCooldown)
{
//--- İşlem bekleme süresi dolmadı, yeni işlem açmayı atla
geri dön;
}
ExtExpert.OnTrade();
}
//+------------------------------------------------------------------+
//| "Ticaret" olay işleyici işlevi |
//+------------------------------------------------------------------+
void OnTrade()
{
ExtExpert.OnTrade();
}
//+------------------------------------------------------------------+
//| "Zamanlayıcı" olay işleyici işlevi |
//+------------------------------------------------------------------+
void OnTimer()
{
ExtExpert.OnTimer();
}
//+------------------------------------------------------------------+
Herkese merhaba😊
@Mario31415927
Bunun nedeni, ticker'da her yeni dönem veya yeni çubukta (her neyse) değişkenlerin olmasıdır:
pozisyonların zaten açık olup olmadığına bakılmaksızın sıfırlanır.
Bu, kodda nispeten hızlı bir şekilde bulunabilir.
Ancak, bunun amaçlanıp amaçlanmadığı ve eğer öyleyse, tüm pozisyonların tekrar nasıl kapatıldığı sorusu ortaya çıkmaktadır.
Belki de bu bağlamda TRADE_ACTION_DEAL emir türünü anlamıyorum?
Ticaret emri süreci de basitçe Ticaret sınıfına uyarlanabilir. Örneğin:
Saygılarımla:-)Okuyun: https://www.mql5.com/tr/articles/232
Bu, emirler, pozisyonlar ve anlaşmalar arasındaki farkı ve ilişkileri açıklar. İkincisi, broker tarafındaki rezervasyon süreçlerini yansıtır.
Okuyun: https://www.mql5.com/tr/articles/232
Bu, emirler, pozisyonlar ve anlaşmalar arasındaki farkı ve ilişkileri açıklar. İkincisi, broker tarafındaki rezervasyon süreçlerini yansıtır.
Merhaba Carl,
İpucu için teşekkürler!
Ancak, kendimi düzeltmeliyim.
Değişkenlerin her yeni zaman dilimi için sıfırlandığı doğrudur:
Ancak buna göre bir pozisyon varsa daha sonra tekrar ayarlanırlar.
Bununla birlikte, alış (POSITION_TYPE_BUY) doğru bir şekilde sorgulanıyor, ancak satış (POSITION_TYPE_SELL) sorgulanmıyor. Değişken artık ayarlanmıyor mu?
Kodda adım adım hata ayıklamam gerekiyor. Bu sadece mantıksal bir hata olabilir😉
Sell_opened = true; // Bu bir Satıştır
Tanrım, bugün çok heyecanlıyım.
Sadece bir kez sorgulanır. Hata bu;-)
Tüm pozisyonlar aşağıdaki gibi aranmalıdır;
Gerçekten de bir hataydı, bir web dosyası gibi görünüyor.
İçeriğe göre kendim yeniden yazdım ve yükledim. Bu işte yeni olduğum için detay var mı bilmiyorum. Umarım yardımcı olur.
Test Cihazı - "Desteklenmeyen dolum modu"
3 farklı brokerda denedim. Sorun nedir?