Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 189

 
Metatrader 5 ile önceki 4 arasındaki fark nedir, onunla çalışmak ya da çalışmamak daha zordur. Her komisyoncu bu programları sunar ve neden tüm komisyoncular için çok fazla yüklememek için tek bir program yoktur.
Блог полезных и познавательных статей обо всем, на различную тематику категорий, все интересное, что бы Вам хотелось узнать и найти в материалах Интернет сети
Блог полезных и познавательных статей обо всем, на различную тематику категорий, все интересное, что бы Вам хотелось узнать и найти в материалах Интернет сети
  • es-blogy.ru
Если вами соблюдается диета при язве, то это поможет вам избежать частых обострений и свести их к минимуму; а чем меньше обострений, тем меньше количество медикаментозных препаратов вам нужно принимать. Инфекцию Н. pylori можно обнаружить двумя способами: провести анализ крови; анализ желудочного сока. Эндоскопическое или радиологическое...
 
koctik :
Metatrader 5 ile önceki 4 arasındaki fark nedir, onunla çalışmak ya da çalışmamak daha zordur. Her komisyoncu bu programları sunar ve neden tüm komisyoncular için çok fazla yüklememek için tek bir program yoktur.
Her iki terminali de indirin, demo hesaplarda deneyin ve kendiniz öğrenin.
 

Kapalı son konumun sonucunu (artı veya eksi) döndürecek bir işlev oluşturmaya çalışıyorum. Bu işlev, birden çok para biriminden oluşan bir Uzman Danışman için tasarlanmıştır ve tüm döviz çiftlerinden son kapatılan pozisyonu seçmelidir ve burada bir şey benim için çalışmıyor. İşlevi düzeltebilir misin?

 double last_profit()
{  
int dir = 0 ;
double prof = 0 ;
ulong d_ticket;

if ( HistorySelect ( 0 , TimeCurrent ())) 
    {
       int j= HistoryDealsTotal ()- 1 ;
       if (j> 0 )
      {
         d_ticket = HistoryDealGetTicket (j);
         if (d_ticket> 0 )
         { 
         mydeal.Ticket(d_ticket);          
         prof = mydeal.Profit();
         }
       }
     }
if (prof < 0 )dir = - 1 ;
if (prof > 0 )dir = 1 ;
if (prof == 0 )dir = 0 ;

return (dir);
} 

 
Automated-Trading :

OBJ_ALL_PERIODS=2097151

Teşekkürler, ama işe yaramadı. Sorun şu ki, D1 ve ...... döneminin hesaplamaları tüm zaman dilimlerinde görüntülenmelidir ve rastgele çalışmaz. Ne yapalım???
Dosyalar:
macd2.mq5  4 kb
 
Reshetov :

Ne anlama geliyor: sınıflarında kullanılmayan yöntemler? OOP'deki uygulama bu değil. OOP'deki normal bir programcı, algoritmik programlamanın aksine, aynı sınıf daha sonra diğer uygulamalarda faydalı olabileceğinden veya sınıf kitaplığına girebileceğinden, tüm durumlar için çağrılan gerekli tüm alan ve yöntemlerle sınıflar oluşturur. Bir proje çerçevesinde bile, hemen tam teşekküllü sınıflar oluşturmanın ve kesilmemiş sınıflar oluşturmanın daha iyi olduğu gerçeğinden bahsetmiyorum, böylece daha sonra kaynak koduna tırmanmanız ve gerekli alanları eklemeniz gerekmez. ve yöntemler.

OOP'de, birçok insanın algoritmik programlamada alıştığı tasarruflar ancak daha sonra geri tepecektir. Kullanılmayan her şey programcı tarafından değil, derleyici tarafından koddan çıkarılmalıdır.

Tabii ki, OOP'de kaynak kodu algoritmik programlamadan daha büyüktür. Ancak bu bir dezavantaj değil, bir avantajdır, çünkü. bu projedeki "ekstra" kodun önemli bir kısmı başka projelerde yeniden kullanılabilir.

Bir kambur oluşturmaya çalışmanıza gerek yok, yani. her şeyi bir sınıfa koyun. Sınıf kitaplıkları oluşturmanız gerekir, yani. işlevselliği ayrı sınıflara ayırın ve bu ekonomiye yorum eklemeyi unutmayın, o zaman her şey yolunda. Ben de başlangıçta Pascal'dan sonra Java çalışmaya başladığımda, eski alışkanlığa göre her şeyi tek parça halinde yapmaya çalıştım, yani. pratik olarak, OOP kullanmak yerine, belirli bir görev için gerekli olan her şeyi doldurduğu bir sınıf yarattı, yani. algoritmik programlamada olduğu gibi. Gelecekte hiçbir yere uygulanması mümkün olmayan evrensel olmayan bir karmaşa olduğu ortaya çıktı, böyle bir kodu anlamak için bacağınızı kıracağınız gerçeğinden bahsetmiyorum bile.

Bütün bunları çok iyi anlıyorum. Ancak en azından kullanılmayan özel değişkenleri VisualStudio'da olduğu gibi göstermek mümkün müdür?

Buradaki nokta, sınıfların geliştirme sürecinde tasarlanmasıdır. Yaratılıştan önce her şeyi hesaba katmak kesinlikle imkansızdır. Bu nedenle çerçeve sınıfları, mümkün olan minimum işlevsellik ile oluşturulur. Bu çerçeve sınıfları etkileşime girdikçe ortak bir mimari ortaya çıkmaya başlar. Yöntemlerin bazıları basitçe silinir, bazıları özel bölüme girer, bazıları bir sınıftan diğerine geçer. Bu süreçte, unutulmuş değişkenler, yöntemler ve hatta tüm sınıflar kaçınılmaz olarak ortaya çıkar. Bu normal. Okama'nın çalışma prensibinden başka bir şey değil - önce kötü, gereksiz kod yazın. Sonra görevi daha net bir şekilde resmileştiririz ve bazı varlıklar basitçe kaybolur. Fazlalık ortadan kalkar. Ve tam da bu süreçte derleyicinin yardımı çok yardımcı olacaktır - kullanılmayan değişkenleri ve en azından özel yöntemleri görmek çok yardımcı olacaktır.

 

Merhaba.

Anladığım kadarıyla göstergelerde kullanılan OnCalculate () fonksiyonu kendi kendine üretiyor yani. fiyat değişikliği olayı meydana gelmeden,

Göstergede hangi işlevin uygulanabileceği, yalnızca bir fiyat değişikliğinin başlamasıyla birlikte oluşturulan göstergeye uygulanabilir. teşekkürler

 
Vikon :

Merhaba.

Anladığım kadarıyla göstergelerde kullanılan OnCalculate () fonksiyonu kendi kendine üretiyor yani. fiyat değişikliği olayı meydana gelmeden,

Göstergede hangi işlevin uygulanabileceği, yalnızca bir fiyat değişikliğinin başlamasıyla birlikte oluşturulan göstergeye uygulanabilir. teşekkürler

Calculate olayı , yalnızca Init olayını ve fiyat verilerindeki herhangi bir değişikliği gönderdikten hemen sonra göstergeler için oluşturulur. OnCalculate işlevi tarafından işlenir. Ayrıca, geçmiş değiştiğinde (geçmiş değiştirildiğinde), OnCalculate oluşturulacaktır .

Gösterge için OnCalculate , fiyat verileri değiştiğinde tüm gösterge hesaplamalarının yapıldığı en önemli fonksiyondur.

 
barabashkakvn :

Calculate olayı , yalnızca Init olayını ve fiyat verilerindeki herhangi bir değişikliği gönderdikten hemen sonra göstergeler için oluşturulur. OnCalculate işlevi tarafından işlenir. Ayrıca, geçmiş değiştiğinde (geçmiş değiştirildiğinde), OnCalculate oluşturulacaktır .

Gösterge için OnCalculate , fiyat verileri değiştiğinde tüm gösterge hesaplamalarının yapıldığı en önemli fonksiyondur.

Burada bir tür saplantı var, yani. sürekli üretir ve periyot değiştiğinde okumalar değişir. Hata nerede?

#property telif hakkı "Telif hakkı 2014, MetaQuotes Software Corp."
#özellik bağlantısı "http://www.mql5.com"
#özellik sürümü "1.00"
#özellik göstergesi_chart_window
//+------------------------------------------- --------------------+
//| özel gösterge başlatma işlevi |

int EMA1=12;
intEMA2=26;
intSMA=9;

ENUM_TIMEFRAMES period_macd;
tarihsaat t_MACD[];
çift MACD[];
bool high_low=yanlış;
int shift_start;
çift w_MACD[],d_MACD[];
int w_MACD_handle,d_MACD_handle;

int barDown=0;
int barUP=0;

//+------------------------------------------- --------------------+ dönüş (0);
int OnInit()
{
w_MACD_handle=iMACD(BOŞ,PERIOD_W1,EMA1,EMA2,SMA,PRICE_CLOSE);
d_MACD_handle=iMACD(BOŞ,PERIOD_D1,EMA1,EMA2,SMA,PRICE_CLOSE);
ArraySetAsSeries(MACD,doğru);
ArraySetAsSeries(t_MACD,true);
ArraySetAsSeries(w_MACD,true);
ArraySetAsSeries(d_MACD,true);
dönüş(INIT_SUCCESSED);
}
//+------------------------------------------- -------------------+ MACD_handle=iMACD(BOŞ,PERIOD_W1,EMA1,EMA1,SMA,PRICE_CLOSE);
//| özel gösterge yineleme işlevi |
//+------------------------------------------- --------------------+
int OnCalculate(const int oranları_toplam,
const int önceki_hesaplanmış,
const tarihsaat &saat[],
const double &aç[],
const çift &yüksek[],
const çift &düşük[],
const double &kapat[],
const uzun &tick_volume[],
const uzun &hacim[],
const int &spread[])
{

ObjectsDeleteAll(0,0,-1);
///////////////////////////////////////////// //////
period_macd=PERIOD_D1;
CopyBuffer(d_MACD_handle,0,0,1000,d_MACD);
ArrayCopy(MACD,d_MACD,0,0,WHOLE_ARRAY);
Başlat();
ObjectCreate(0,"lin_2",OBJ_VLINE,0,t_MACD[shift_nachalo],0);
ObjectSetInteger(0,"lin_2", OBJPROP_BACK,true);
ObjectSetInteger(0,"lin_2",OBJPROP_TIMEFRAMES,OBJ_ALL_PERIODS);
ObjectSetInteger(0,"lin_2",OBJPROP_COLOR,clrYellow);
ObjectSetInteger(0,"lin_2",OBJPROP_STYLE,1);
dönüş(oranlar_toplam);
}
//+------------------------------------------- --------------------+
///////////////////////////////////////////// //////////////////////////
void nachalo() // yeni bir dalganın başlangıcı
{
double low_nachalo[],high_nachalo[];
CopyTime(NULL,period_macd,0,1000,t_MACD);
eğer (MACD[1]>0)
{yüksek_düşük=yanlış;
while (MACD[barDown]>0)
{barDown++;}
barUP=barDown;
süre (MACD[barUP]<0)
{barUP++;}
CopyLow(NULL,period_macd,0,barUP,low_nachalo);
ArraySetAsSeries(low_nachalo,true);
shift_nachalo=ArrayMinimum(low_nachalo,barDown-1,barUP-(barDown-1));
}
eğer (MACD[1]<0)
{yüksek_düşük=doğru;
süre (MACD[barUP]<0)
{barUP++;}
barDown=barUP;
while (MACD[barDown]>0)
{barDown++;}
CopyHigh(NULL,period_macd,0,barDown,high_nachalo);

ArraySetAsSeries(high_nachalo,true);

shift_nachalo=ArrayMaximum(high_nachalo,barUP-1,barDown-(barUP-1));
}}
Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
Dosyalar:
macd2.mq5  4 kb
 
Vikon :

Burada bir tür saplantı var, yani. sürekli üretir ve periyot değiştiğinde okumalar değişir. Hata nerede?


Bir forumda kod nasıl gönderilir.

 
Vikon :


Hataya dikkat edin:

Bağlı gösterge arabelleği yok

Kullanmak:

 //---- превращение динамических массивов в индикаторные буферы
   SetIndexBuffer ()
Ayrıca " MQL5'te bir gösterge nasıl yazılır " makalesini de okuyun.