Ş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.
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.
Handeln Sie nach Ihrer eigenen Strategie? Wenn Sie Ihre Handelsregeln formalisieren und als Algorithmus für ein Programm beschreiben können, wäre es doch besser, Ihren Handel einem automatisierten Expert Advisor anzuvertrauen. Ein Roboter braucht weder Schlaf noch Nahrung und ist keinen menschlichen Schwächen unterworfen. In diesem Artikel zeigen wir Ihnen, wie Sie, um einen Handelsroboter im Freelance-Service in Auftrag zu geben, das sogenannte Pflichtenheft erstellen.
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
Eine Überwachung des aktuellen Status eines Handels-Account bedeutet offene Positions und Order kontrollieren zu können. Bevor ein Handelssignal zu einem Abschluss wird, sollte es vom Client-Terminal als Anfrage zum Handels-Server geschickt werden, wo es in eine Order-Warteschlange gestellt wird und auf seine Bearbeitung wartet. Eine Anfrage vom Handels-Server annehmen, sie löschen, wenn sie abläuft oder auf ihrer Grundlage einen Abschluss ausführen - alle diese Handlungen haben Handelsereignisse zur Folge, und der Handels-Server informiert das Terminal entsprechend darüber.
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:
bool Buy_opened = false, Sell_opened = false; // açılan pozisyonun sonucunu tutmak için değişkenler
Ancak buna göre bir pozisyon varsa daha sonra tekrar ayarlanırlar.
if(PositionSelect(_Symbol) == true) { // açılmış bir pozisyonumuz varif(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) {
Buy_opened = true; //Bu bir Alış
}
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) {
Sell_opened = true; // Bu bir Satış
}
}
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😉
Dieser Beitrag beschäftigt sich mit dem Objekt-orientierten Ansatz, um das zu machen, was wir bereits im Artikel "Schrittweiser Leitfaden zum Schreiben eines Expert Advisors in MQL5 für Anfänger" getan haben - einen einfachen Expert Advisor erstellen. Die meisten Menschen glauben, das sei schwer, doch ich darf Ihnen versichern: wenn Sie diesen Beitrag gelesen haben, dann können Sie Ihren eigenen Objekt-orientierten Expert Advisor schreiben.
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?