MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1316

 
Igor Makanu :

Soruların seviyesini yukarıda yazdım ;)

ve OnTick / OnInit'te başlatmanın optimalliğini aramaya başladınız - orada her şey daha basit, bulunan kodun aynı arkadaşlarla paylaşılması için korumaya ihtiyacınız var)))

Açıkça, sonra bir tost: bulunan "arkadaşlar" için!

 
Igor Makanu :

bulunan kodun aynı arkadaşlarla paylaşılması için korumaya ihtiyaç var)))

Güzel çizgi. Can sıkıcı görünebiliriz ama eğleniyoruz!

 
Vitaly Muzichenko :

işte sınır bu :(


Vitaly, peki, ne kadar olumsuz. Adam sadece trollemesini istiyor saygı duymalısın)

Igor Makanu :

Soruların seviyesini yukarıda yazdım ;)

ve OnTick / OnInit'te başlatmanın optimalliğini aramaya başladınız - orada her şey daha basit, bulunan kodun aynı arkadaşlarla paylaşılması için korumaya ihtiyacınız var)))

))))

 
Aleksey Mavrin :

Vitaly, peki, ne kadar olumsuz. Adam sadece trollemesini istiyor saygı duymalısın)

))))

Tamam, biraz pozitiflik

 
İyi zaman, söyle lütfen. Kılavuz, olayın Init, OnInit() işlevi tarafından işlenir. Bu olay, finansal araç ve/ veya grafik periyodundaki bir değişiklikten sonra da oluşturulur.

İşte benim basit kodum. Zaman çerçevesini değiştirirken işlev çalışır, ancak enstrümanı değiştirirken çalışmaz. Yoksa "finansal araç değişikliği" terimini yanlış mı anlıyorum?

 int OnInit ()
  {
     Print ( "HALLO" );
     return ( INIT_SUCCEEDED );
  }
Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
WinProject :
İyi zaman, söyle lütfen. Kılavuz, olayın Init, OnInit() işlevi tarafından işlenir. Bu olay, finansal araç ve/ veya grafik periyodundaki bir değişiklikten sonra da oluşturulur.

İşte benim basit kodum. Zaman çerçevesini değiştirirken işlev çalışır, ancak sembolü değiştirirken çalışmaz. Yoksa "finansal araç değişikliği" terimini yanlış mı anlıyorum?

 int OnInit ()
  {
     Print ("HALLO Period ()= ", Period ()," Symbol ()=", Symbol ());
     return ( INIT_SUCCEEDED );
  }

Algı sadakati için böylesi daha iyidir. Grafiğe yeni bir sembol atarsanız, OnDeinit çalışmalı ve OnInit ile başlamalıdır.

 
Valeriy Yastremskiy :

Algı sadakati için böylesi daha iyidir. Grafiğe yeni bir sembol atarsanız, OnDeinit çalışmalı ve OnInit ile başlamalıdır.

Teşekkür ederim, bunca yıldır terminaldeyim ve piyasa incelemesinden grafiğe ekleyebileceğinizi bilmiyordum, bir finansal enstrümanı değiştirmenin başka bir enstrümanla grafik penceresine geçiş olduğunu düşündüm.

 

Merhaba, söyle bana, lütfen, bu bir hata mı yoksa yanılıyor muyum?

hazır fonksiyonlarla da elde edilebilecek bazı hesaplamalar yaptı ve farkı fark etti.

Marjı hesapladım ve test cihazında marj hesaplaması ve AccountInfoDouble(ACCOUNT_MARGIN) farklı sonuçlar verirken demoda bir fark yok.

 #property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
 

input double lot= 0.1 ;
input int plecho= 100 ;
input double lot_increment= 1 ; //увеличение лота
input int level_size= 50 ;
input int Magic = 0 ;
input int deviation = 10 ; //допустимое проскальзывание

double margin, margin_free, uroven, sredstva_pri_s_o, margin_call, stop_out;
int N;



int OnInit (){

Print ( "Bid " , Bid);

int ticket= OrderSend ( NULL , OP_BUY, lot, Ask, 0 , 0 , 0 , "" , Magic, 0 );
     //ticket=OrderSend(NULL, OP_SELL, lot, Bid, 0, 0, 0);


Print ( "  ACCOUNT_MARGIN " , AccountInfoDouble ( ACCOUNT_MARGIN )
, "  ACCOUNT_MARGIN_LEVEL " , AccountInfoDouble ( ACCOUNT_MARGIN_LEVEL ));

margin=(OrderLot()* 100000 *OrderPrice())/plecho;
Print ( "OrderLot() " , OrderLot(), "  OrderPrice() " , OrderPrice());
margin_free= AccountInfoDouble ( ACCOUNT_EQUITY )-margin;
uroven=( AccountInfoDouble ( ACCOUNT_EQUITY )/margin)* 100 ;
sredstva_pri_s_o=(margin* AccountInfoDouble ( ACCOUNT_MARGIN_SO_SO ))/ 100 ;
N=( int ) NormalizeDouble (( AccountInfoDouble ( ACCOUNT_BALANCE )-sredstva_pri_s_o)
/MarketInfo( Symbol (), MODE_TICKVALUE), 0 );
stop_out=OrderPrice()-(N* Point ());

Print ( "stop_out " , stop_out, "  margin " , margin, "  uroven " , uroven
, "  ACCOUNT_MARGIN_SO_SO " , AccountInfoDouble ( ACCOUNT_MARGIN_SO_SO )
, "  ACCOUNT_MARGIN_LEVEL " , AccountInfoDouble ( ACCOUNT_MARGIN_LEVEL )
, "  ACCOUNT_MARGIN " , AccountInfoDouble ( ACCOUNT_MARGIN ));
return ( INIT_SUCCEEDED );
} //+------------------------------------------------------------------+
void OnDeinit ( const int reason){
} //+------------------------------------------------------------------+
void OnTick (){


Print ( "  ACCOUNT_MARGIN " , AccountInfoDouble ( ACCOUNT_MARGIN )
, "  ACCOUNT_MARGIN_LEVEL " , AccountInfoDouble ( ACCOUNT_MARGIN_LEVEL ));

Comment ( "AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL) " , AccountInfoDouble ( ACCOUNT_MARGIN_SO_CALL )
, "  AccountInfoDouble(ACCOUNT_MARGIN_SO_SO) " , AccountInfoDouble ( ACCOUNT_MARGIN_SO_SO )
, "  AccountInfoDouble(ACCOUNT_MARGIN_LEVEL) " , AccountInfoDouble ( ACCOUNT_MARGIN_LEVEL )
, "  AccountInfoDouble(ACCOUNT_MARGIN) " , AccountInfoDouble ( ACCOUNT_MARGIN )
, "  MarketInfo(Symbol(), MODE_MARGINREQUIRED) " , MarketInfo( Symbol (), MODE_MARGINREQUIRED) , "\n"
, "margin " , margin
, "  margin_free " , margin_free 
, "  uroven " , uroven );
} //+------------------------------------------------------------------+

double OrderPrice(){
   double count= 0 ;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--){
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)){
         if (OrderSymbol() == Symbol ()  && OrderMagicNumber()==Magic )
            count=OrderOpenPrice();
      }   
   } 
   return (count);   
}
double OrderLot(){
   double count= 0 ;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--){
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)){
         if (OrderSymbol() == Symbol ()  && OrderMagicNumber()==Magic )
            count=OrderLots();
      }   
   } 
   return (count);   
}


 
Lütfen yardım et.

Her şeyi denedim ama yine de 130 hatası veriyor.
Dosyalar:
Wai_v_5.0.mq4  59 kb
 
herkese günaydın. Danışman kâsesi yazmaya çalışıyorum tabii ki ;-). Ama nedense çalışmak istemiyor. Ve ekran görüntüleri ile bir sürü anlaşılmaz metin boyamamak için bir video kaydettim. Videonun linkini mesaja bırakıyorum. Bu daha net ve daha hızlı hale getirecek. Soru videoda. Şimdiden teşekkür ederim. https://youtu.be/tqZrXjMONrE
ВОПРОС ПО НАПИСАНИЮ СОВЕТНИКА
ВОПРОС ПО НАПИСАНИЮ СОВЕТНИКА
  • 2020.12.09
  • www.youtube.com
ПИШУ СОВЕТНИК НА MQL4, А ГДЕ-ТО ДОПУСТИЛ ОШИБКУ- ПОМОИГИТЕ ПОЖАЛУЙСТА ПОНЯТЬ ГДЕ И В ЧЁМ ЭТА ОШИБКА ПОЛУЧИЛАСЬ?