turns-00055.parquet:64515
fac33e37bb26e0d7128c8f92
turn 3/7gpt-4o-2024-11-20TurkishTürkiye628 words
degenerate_repetitionAbsentFinal dense release
USER
bunu mql5 e çevir
ASSISTANT
Verilen MQL4 kodu oldukça detaylı ve karmaşık bir otomatik al-sat stratejisi içeriyor. Ancak MQL5, MQL4'e oldukça benzese de bazı temel farklılıklara sahiptir (örneğin, emir yönetimi, grafik nesneleri ve veri yapılarına yönelik değişiklikler). Bu nedenle, bu tarz bir MQL4 kodunu, MQL5'e çevirmek biraz manuel çalışma gerektirir.
Aşağıda, genel bir rehber ve önemli parçaların nasıl dönüştürülebileceğine dair adımlar yer almaktadır:
---
### 1. **Kodun Genel Değişiklikleri**
#### a. Emir Yönetimi (Order Management):
- MQL5'te işlem emirleri `OrderSend()` yerine `trade` sınıfı kullanılarak işleme alınır.
- Örneğin, `CTrade` sınıfı ile işlem yapmak gerekir.
- `OrderSend()` fonksiyonu yerine, şu yapı genellikle kullanılır:
```mql
CTrade trade;
trade.Buy(0.1, Symbol(), 0.0, 0.0, 0.0, "Açıklama");
```
- MQL4'te kullanılan `OrdersTotal()`, `OrderType()`, `OrderLots()` gibi fonksiyonlar yerine artık Pozisyonlara ve Bekleyen Emirlere özel işlevler vardır.
- **Pozisyonlar:** `PositionTotal()`, `PositionGetSymbol()`, `PositionGetInteger()`
- **Bekleyen Emirler:** `OrderSend()` (bekleyen alım/satış emirleri), `HistoryDealGet()`
---
#### b. Teknik Göstergeler:
- MQL5'te teknik göstergeler `iCustom()`, `iMA()`, `iRSI()` gibi fonksiyonlar kullanılarak çağrılır.
- Ancak, bu göstergeler **handle** kullanır ve bu handle değerini ayıklayıp veri almak için bir dizi kullanmanız gerekir.
- Örneğin, RSI'nin kullanımı şu şekildedir:
```mql
int rsi_handle = iRSI(Symbol(), PERIOD_CURRENT, 14, PRICE_CLOSE);
// Verilere ulaşmadan önce göstergenin elverişli olup olmadığını kontrol edin
if (rsi_handle != INVALID_HANDLE) {
double rsi_buffer[];
if (CopyBuffer(rsi_handle, 0, 0, 3, rsi_buffer) > 0) {
Print("RSI değeri: ", rsi_buffer[0]); // Son RSI değeri
}
}
```
- RSI işlemlerini, örneğin `RSI > 50` gibi mantık kontrollerine uyarlamak için doğrudan bu metodu kullanabilirsiniz.
---
#### c. Zamanlama:
- MQL4’te kullanılan `OnStart()`, `OnTick()`, `OnDeinit()` yerine, `OnInit()` ve `OnDeinit()`, MQL5'te de bulunur. Onlara ek olarak, `OnCalculate()` fonksiyonu göstergeler için kullanılır ve veri girişini işlemek için daha sık tercih edilir.
- Zamanlayıcı işlemleri benzerdir, ancak `EventSetTimer()` ve `EventKillTimer()` gibi fonksiyonlar kullanılabilir.
---
#### d. Grafik Nesneleri (Chart Objects):
- MQL5'te grafik nesneleri benzerdir, ancak grafik pencereleri `ChartSetInteger()` ve `Object` sınıflarıyla daha detaylı bir şekilde yönetilir.
---
### 2. **Örnek Çeviri (RSI Kullanımı)**
Aşağıda verilen MQL4 kodundan alınan bir `RSI > 50` koşul kontrolü ve buna dayalı alım işlemini gerçekleştiren bölümün (MQL5'e dönüştürülmüş) örnek çevirisi:
#### MQL4:
```mql
if (iRSI(Symbol(), PERIOD_CURRENT, 14, PRICE_CLOSE, 0) > 50) {
double lots = 0.1;
double price = Ask;
ulong ticket = OrderSend(Symbol(), OP_BUY, lots, price, 3, 0, 0, "RSI Buy Signal", MagicNumber, 0, clrBlue);
if (ticket > 0) {
Print("Buy Order Placed, Ticket#: ", ticket);
}
}
```
#### MQL5 Çevirisi:
```mql
#include <Trade\Trade.mqh>
input double lots = 0.1;
CTrade trade;
void OnTick() {
// RSI Hesaplama
int rsi_handle = iRSI(Symbol(), PERIOD_CURRENT, 14, PRICE_CLOSE);
if (rsi_handle == INVALID_HANDLE) {
Print("RSI göstergesi oluşturulamadı!");
return;
}
double rsi[];
if (CopyBuffer(rsi_handle, 0, 0, 1, rsi) > 0) {
if (rsi[0] > 50.0) {
if (trade.Buy(lots, Symbol(), 0.0, 0.0, 0.0, "RSI Buy Signal")) {
Print("Alım Emri Gerçekleşti.");
} else {
Print("Alım Emrinde Hata: ", GetLastError());
}
}
}
// RSI göstergesini serbest bırak
IndicatorRelease(rsi_handle);
}
```
---
### 3. **Tam Dönüşüm İçin Adımlar**
Eğer tam bir dönüşüm gerekiyorsa, aşağıdaki adımları izleyerek kodu MQL5'e aktarabilirsiniz:
1. **Başlangıç ve Kapanış Fonksiyonlarını Değiştirin:**
- `OnInit()`, `OnTick()`, `OnDeinit()` gibi temel işlevler uyarlanmalı.
2. **Emir Yönetimi Yapısı ile `CTrade` Tabanlı Kod Yazın:**
- `Stop Loss` ve `Take Profit` seviyelerini belirlemede `CTrade` sınıfını kullanmanız gerekecek.
3. **RSI, Ortalama Yakınsama, vb. İçin Teknik Gösterge Handle Kullanın:**
- MQL5'teki gösterge API'lerine geçiş yapmak için yukarıdaki RSI örneğinde gördüğünüz gibi `CopyBuffer()` kullanın.
4. **Hata Kontrolü ve Yaygın Hataları Yönetin:**
- MQL5'te gerçekleşen işlemler sonunda her zaman `GetLastError()` ile hataları kontrol edin.
5. **Grafik Nesnelerini Yeniden Yaratın:**
- `ObjectCreate()` fonksiyonları aynı mantıkla çalışır ancak MQL5 farklı özelliklere izin verir.
---
### Sonuç
Kodunuzun tamamının MQL5'e dönüştürülmesi biraz zaman alabilir ve her bir özelliğin manuel olarak uyarlanmasını gerektirir. Bu nedenle, her bir parçayı yukarıdaki örnekler doğrultusunda adım adım dönüştürmeyi düşünebilirsiniz. Kodunuz çok büyük olduğundan, ihtiyacınıza göre yeni bölümler talep edebilirsiniz! 😊