MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 41
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
Evet, haklısın, sadece kod öyle bir tarzda yazılmış ki, önceki konuşmacı onu yanlış yorumlamış.
Kontrol etmeye ne dersin?
//| TestLogics.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int Value= 0 ; // Количество имеющихся ордеров
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart ()
{
//---
if (Value> 0 ) Alert ( "1. Количество ордеров=" ,Value);
else Alert ( "2. Это код после else" );
{
Alert ( "3. Ордера отсутствуют" );
}
}
//+------------------------------------------------------------------+
Kontrol etmeye ne dersin?
pancake, gerçekten de, şimdi orijinal kodu tekrar gözden geçirdi ve yanlıştı. Bir tür eğri yazma tarzı - kafamı karıştırdı.
Yeniden kontrol edildi, "ekstra" kaldırıldı
sıfıra bölme gitti
Yeniden kontrol edildi, "ekstra" kaldırıldı
sıfıra bölme gitti
Yeniden kontrol edildi, "ekstra" kaldırıldı
sıfıra bölme gitti
Çünkü bölenin 0'dan farklı olup olmadığına dair bir kontrol yoktur. Sipariş ve lot 0 olmadığında aşağıdaki kodu çalıştırmanın anlamı nedir?
bir çek koy
{
double avg_price= 0 ;
price= 0 ;
bool z= true ;
double orderlots= 0 ;
for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
{
if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) && ( OrderSymbol ()== Symbol ())
&& ( OrderMagicNumber ()==Magic) && ( OrderType ()==FindLastOType()))
{
price+= OrderOpenPrice ()* OrderLots ();
orderlots+= OrderLots ();
}
}
if (orderlots== 0 ) { return ; } // если ничего нет - выходим
avg_price= NormalizeDouble (price / orderlots, Digits );
if (FindLastOType()== OP_BUY ) tp= NormalizeDouble (avg_price+TakeProfit* Point (), Digits );
if (FindLastOType()== OP_SELL ) tp= NormalizeDouble (avg_price-TakeProfit* Point (), Digits );
for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
{
if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) && ( OrderSymbol ()== Symbol ())
&& ( OrderMagicNumber ()==Magic) &&( OrderType ()==FindLastOType()))
z= OrderModify ( OrderTicket (), OrderOpenPrice (), 0 ,tp, 0 );
if (!z)
Print ( "Ошибка функции модифицирования" );
}
}
bir çek koy
Ama çok şey kaçırdım, teşekkürler.
Evet atladıkları normal, dergi okumamaları normal değil, hepsi orada yazıyor.
Okumak niyetinde değildim. "Piyasada doğrulama için" yazıyor. Ürünlerim asla piyasada olmayacak.
sıfıra bölme hakkında
peki ya yukarıdaki? Oradan sipariş almalı
{
fiyat+= OrderOpenPrice ()* OrderLots ();
sipariş lotları+= sipariş lotları ();
}
}
if (orderlots== 0 ) { dönüş ; } // hiçbir şey yoksa - çıkış
avg_price= NormalizeDouble (fiyat / sipariş lotları, Rakamlar );
if (FindLastOType()== OP_BUY ) tp= NormalizeDouble (ort_price+TakeProfit* Point (), Digits );
if (FindLastOType()== OP_SELL ) tp= NormalizeDouble (avg_price-TakeProfit* Point (), Digits );
Okumak niyetinde değildim. "Piyasada doğrulama için" yazıyor. Ürünlerim asla piyasada olmayacak.
Test cihazındaki günlükten bahsediyorum
Eklendi: Kodu normal bir duruma getirin, inceleyin, ardından test cihazında çalıştırın ve hata günlüğünü okuyun. Burada kod parçacıkları yayınlıyorsunuz.