Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 63
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret 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
Gumko :
2 gün için değer
Herkese selam.
Modifikasyon ve sorunlar.
Harici fonksiyon:
bool ModifyPosition(const string sembolü,double StopLoss,double Kâr Al){
//---- arama motorunda yapıyı ve sonucu bildir
MqlTradeRequest isteği;
MqlTradeResult sonucu;
//---- Değiştirilmiş pozisyon için MqlTradeRequest ticaret aramasında yapısal başlatma
request.action = TRADE_ACTION_SLTP ;
request.symbol = sembol;
request.sl = durma kaybı;
request.tp = Kâr Al;
string kelime = "";
StringConcatenate(kelime,
"<<< =========== Modifyposition(): Konumu değiştir ",
sembolü," ============ >>>");
yazdır(kelime);
//---- konumun değiştirilmesi ve hedef aramanın sonucunun kontrol edilmesi
if(!OrderSend(istek,sonuç) || sonuç.anlaşma==0)
{
Print("Hatayı değiştir =", GetLastError());
dönüş(yanlış);
}
dönüş(doğru);
}
Ama bu işe yaramıyor.
Nasıl yapacaklar?
Teşekkürler :)
Şu şekilde deneyin:
Şu şekilde deneyin:
yedelkin,
Teşekkürler, anlamadım.
İşlev çağrısının başlangıcı için doğru sayıp saymadığını kontrol ettim.
İşte nasıl yaptım:
double Bid = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_BID),_Digits);
double Ask = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_ASK),_Digits);
double Open = NormalizeDouble(PositionGetDouble( POSITION_PRICE_OPEN ),_Digits);
double SL = NormalizeDouble(PositionGetDouble(POSITION_SL),_Digits);
if(Aç > 0){
start_buy = Sor - Open;Print("start_buy=",start_buy);
start_sel = Open - Bid;Print("start_sel=",start_sel);
}
Günlükte sürpriz:
MR 0 Çekirdek 1 10:21:49 2012.10.01 01:12:42 2. işlem 0.10 EURUSD 1.28146'dan satıldı (2. sıraya göre)
GH 0 Core 1 10:21:49 2012.10.01 01:12:42 anlaşması yapıldı [#2, 1.2814'ten 0.10 EURUSD sat]
NI 0 Core 1 10:21:49 2012.10.01 01:12:42 emir, 1.28146'dan 0.10 satış gerçekleştirdi [#2, 1.28146'dan (0.00000)'den 0.10 EURUSD sat]
OF 0 Çekirdek 1 10:21:49 2012.10.01 01:12:43 start_buy=0.0001299999999999635
DR 0 Çekirdek 1 10:21:49 2012.10.01 01:12:43 start_sel=5.000000000010552e-005
LE 0 Çekirdek 1 10:21:49 2012.10.01 01:12:43 start_buy=0.0001099999999998325
EN 0 Çekirdek 1 10:21:49 2012.10.01 01:12:43 start_sel=7.00000000000145e-005
Tabii ki, köyün yorumu ilginç, bu tür sayılar nereden geliyor?
Görünüşe göre işlevi doğru yazdım - gösterildiği gibi:
SL&TP Modifikasyonu
StopLoss ve/veya TakeProfit seviyelerini değiştirmek için bir ticaret emri. 4 alan gereklidir:
Peki tam olarak ne "işe yaramadı"?
Kodu doğru yapıştırın (Ctrl+Alt+M):
Burada normalleştirme farklı bir sırayla kullanılmalıdır.
1. SymbolInfoDouble (Currency, SYMBOL_BID ) türündeki değerler sunucudan geldiği için zaten normalleştirilmiş kabul edilir. Ve onları normalleştirmek için ikinci kez gerekli değildir. Onlar. sadece şunu yazabilirsiniz:
2. Ancak herhangi bir aritmetik işlemden sonra normalizasyon ortadan kalkar, yani normalleştirilmiş bir sayı almanız gerekiyorsa şöyle yazmanız gerekir:
Gerisini düşünüyorum.
DR 0 Çekirdek 1 10:21:49 2012.10.01 01:12:43 start_sel=5.000000000010552e-005
EN 0 Çekirdek 1 10:21:49 2012.10.01 01:12:43 start_sel=7.00000000000145e-005
Tabii ki, sadece köyler ilgileniyor - bu tür sayılar nereden geliyor?
700000000000145e-005 , gerçek bir sayının değerini yazmanın sadece bir yoludur. Sanırım buna "bilimsel" deniyor. Ayrıntılar için bkz. " MQL5 Referansı / Dil Temelleri / Veri Tipleri / Gerçek Tipler (double, float)".
yedelkin,
Sorunu üstlendiğin için teşekkürler.
İşte kod: Pozisyon açma fonksiyonları Nikolay Kositsin.Nikolay Kositsin tarafından yazılmıştır.
Örneğin, MFI'ye MA ekledim ve bu MA'yı EA'ya kaydettirmek istiyorum. Nasıl ve nerede bilmiyorum.
Cevap verene teşekkür ederim)
1. Şunu söyleyebilirim: Başka birinin kodunu çok dikkatli kullanmalısınız. Çünkü bir başkasının kodu aynı zamanda bir başkasının hatasıdır.
2. Burada ( https://www.mql5.com/ru/forum/6343/page64#comment_357008 ) Değişkenleri kullanmadan önce doğru şekilde sıfırlamayı denemenizi önerdim. Ancak kodunuzda bu öneri henüz uygulanmadı. Ayrıca, kodda bu tür yapılar vardır:
Görüyorsunuz, bu yapıda istek ve sonuç değişkenleri kullanımdan önce değil, kullanımdan sonra sıfırlanıyor. Ayrıca, bu yerel değişkenleri sıfırladıktan sonra, fonksiyon işini durdurur, yani böyle bir sıfırlamanın kendisi anlamsızdır. Başka bir deyişle, böyle bir yapı, MqlTradeRequest ve MqlTradeResult türlerinin değişkenlerinin nasıl sıfırlanmayacağının açık bir örneğidir. Bu nedenle, dilerseniz, sonuçta değişkenleri doğru bir şekilde sıfırlamayı deneyin. Bir şey işe yaramazsa, tam olarak neyin "işe yaramadığını" ayrıntılı olarak açıklayın.
3. Standart Kitaplıkta " MQL5 Referans / Standart Kitaplık / Ticaret Sınıfları / CTrade" ticaret sınıfı vardır. Nasıl uygulamaya koyacağınızı bulmaya çalışın. Dile dalmanın ilk aşamasında, bu sınıf oldukça yeterli olabilir. Örneğin, bu sınıf şu metoda sahiptir: " MQL5 Reference / Standard Library / Trade Classes / 2 CTrade / PositionModify". Bu şekilde uygulanır:
'ClearStructures();' satırını içerir. sadece kullanmadan önce m_request değişkenini sıfırlar.