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

 
LSM :
Sorumu düzenledim, kod ekledim. Bir döngü gider. Bu bir döngüde gerçekleştiğinde ne alacağım belli değil.
Orada her şey açık
örneğin, döngüde gösterge 15. sayıldı. 5 dakikalık mum
15+1'den değer alınırken 15 dakikalık mumdan 16 tane.


 
LSM :

Birisi için yararlı olması durumunda kendi soruma cevap vereceğim.

Bu doğru.
 

Güzel gün.

Söyle bana, bir fikir geldi, ama hangi taraftan yaklaşacağımı "Ben yetişemiyorum".

Bir gösterge var, sunucuda barındırılan bir CSV dosyasından belirli bir hesap numarası listesi için erişim açıldı.

Bu belirli kullanıcı için grafikte görüntülenmesi için listeden belirli bir hesap için bir mesaj yazmak teknik olarak mümkün mü?

Örneğin, CSV'de hesap numarasını belirtiyorum ve "Merhaba ..." gibi bir metin yazıyorum ve kullanıcı bunu grafikte görüyor mu? Bu mümkünse, hangi yönde "kazmak"? Teşekkürler...

 

Tünaydın. mql4 sözdiziminin bazı özelliklerini anlamama yardım eder misiniz? Örneğin, emir açılış seviyesinden 150 puanlık bir duruş ve 50 puanlık bir alım ile uzun bir çizgiye girecek olan trendle ticaret yapmak için bir danışman yazma fikri var ve ardından fiyat tp'ye ulaşırsa, 150 stop ve kar al - 50 ile yeni bir alım açılacak ve stoploss ile nakavt olmuşsa, long'larda olduğu gibi aynı risk / kar oranı ile satış yapılacaktı. Böyle bir mantıkla kod yazılmaya çalışıldı, ancak danışman test sırasında herhangi bir işlem yapmadığından başarılı olamadı.

 double b, difference;
int ticket;

int OnInit ()
{
   b= Bid ;
   return (b);
}

void OnTick ()
{
   difference = Bid -b;
   if ( OrdersTotal ()== 0 )
   {
       if (difference== 150 * Point )
      {
         ticket= OrderSend ( Symbol (), OP_BUY , 1 , Ask , 0 , Ask - 150 * Point , Ask + 50 * Point , 0 );
         if (difference== 0 ){b= Bid + 150 * Point ;}
             if (ticket< 0 )
            {
               Print ( "lose" );
            }
      }
       if (difference== 200 * Point ){b= Bid - 150 * Point ;}

       if (difference==- 150 * Point )
      {
         ticket= OrderSend ( Symbol (), OP_SELL , 1 , Bid , 0 , Bid + 150 * Point , Ask - 50 * Point , 0 );
         if (difference== 0 ){b= Bid - 150 * Point ;}
             if (ticket< 0 )
            {
               Print ( "lose" );
            }
      }
       if (difference==- 200 * Point ){b= Bid + 150 * Point ;}
   }
}
Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Для разработки торговых систем в платформу встроен собственный язык программирования MetaQuotes Language 5 ( MQL5 ), среда разработки MetaEditor и...
 
MosheDayan :

Güzel gün.

Söyle bana lütfen, bir fikir geldi, ama hangi taraftan yaklaşmak için "Ben yetişemiyorum".

Bir gösterge var, sunucuda barındırılan bir CSV dosyasından belirli bir hesap numarası listesi için erişim açıldı.

Bu belirli kullanıcı için grafikte görüntülenmesi için listeden belirli bir hesap için bir mesaj yazmak teknik olarak mümkün mü?

Örneğin, CSV'de hesap numarasını belirtiyorum ve "Merhaba ..." gibi bir metin yazıyorum ve kullanıcı bunu grafikte görüyor mu? Bu mümkünse, hangi yönde "kazmak"? Teşekkürler...

Hesap numarasıyla sunucuya bir gönderi isteği gönderin

 IntegerToString ( AccountInfoInteger ( ACCOUNT_LOGIN )

Sunucuda, CSV dosyasındaki tüm satırlarla gelen numarayı kontrol edin ve bir eşleşme varsa, terminale yanıt olarak dosyanın bu satırından bir mesaj gönderin. Terminaldeki sunucudan gelen yanıtı okumak ve grafikte görüntülemek için kalır.

Genel olarak, bu tür şeyleri MySQL'de uygulamak bir dosyadan daha kolaydır.

 
Maxim235v34 :
Ve evet, zor değilse, bana bu forumdaki satır aralığını azaltmanın bir yolunu söyleyin.

Önce bir metin dosyasına yazın (not defterinde) - ardından panoya kopyalayın. Böyle çıkacak

 double b, difference;
int ticket;

int OnInit ()
{
   b= Bid ;
   return (b);
}

void OnTick ()
{
   difference = Bid -b;
   if ( OrdersTotal ()== 0 )
   {
       if (difference== 150 * Point )
      {
         ticket= OrderSend ( Symbol (), OP_BUY , 1 , Ask , 0 , Ask - 150 * Point , Ask + 50 * Point , 0 );
         if (difference== 0 ){b= Bid + 150 * Point ;}
             if (ticket< 0 )
            {
               Print ( "lose" );
            }
      }
       if (difference== 200 * Point ){b= Bid - 150 * Point ;}

       if (difference==- 150 * Point )
      {
         ticket= OrderSend ( Symbol (), OP_SELL , 1 , Bid , 0 , Bid + 150 * Point , Ask - 50 * Point , 0 );
         if (difference== 0 ){b= Bid - 150 * Point ;}
             if (ticket< 0 )
            {
               Print ( "lose" );
            }
      }
       if (difference==- 200 * Point ){b= Bid + 150 * Point ;}
   }
}
OnInit() işlevi hakkında bilgi edinin - imleci üzerine getirin ve F1 tuşuna basın . İnt sözcüğü öndedir, bu, işlevin bir tamsayı değeri döndürdüğü anlamına gelir. ve double türünde bir değer döndürmeye çalışıyorsunuz. OnInit() işlevinin yürütülmesinin sonucu, uçbirimin yürütme alt sistemi tarafından analiz edilir ve bu değere pek ihtiyacı yoktur.
 
LRA :

Önce bir metin dosyasına yazın (not defterinde) - ardından panoya kopyalayın. Böyle çıkacak

Teşekkür ederim. Bileceğim.

OnInit() işlevi hakkında bilgi edinin - imleci üzerine getirin ve F1 tuşuna basın . İnt sözcüğü öndedir, bu, işlevin bir tamsayı değeri döndürdüğü anlamına gelir. ve double türünde bir değer döndürmeye çalışıyorsunuz. OnInit() işlevinin yürütülmesinin sonucu, uçbirimin yürütme alt sistemi tarafından analiz edilir ve bu değere pek ihtiyacı yoktur.
Ardından, amaçlananı uygulamak için hangi tipte hangi olay işleyicisi kullanılmalıdır -
Programın başında fiyat değerini sabitleyin, gelecekteki hesaplamalar buna karşı mı yapılacak?
int OnInit'te olan her şeyi kaldırmaya çalıştım ve varStart değişkenini ekleyerek en başında OnTick'i geçersiz kılmak için aşağıdakileri yazdım:
if(varStart==0)
{
b=teklif;
varBaşlangıç=1;
}
Sonuç değişmedi.
 

İşaretçili bir işlev var:


  TickReturn *returntick( int period, int timeposition)
   {
      TickReturn *returntick = new TickReturn();
       MqlRates rates[];
       MqlTick last_tick;
      
       if ( SymbolInfoTick (symbol,last_tick)){}
       else Print ( "SymbolInfoTick() failed, error = " , GetLastError ());
      
       //int timeposition=0;
       ArraySetAsSeries (rates, true );
       ArrayResize (rates, 1 );
       int copied= CopyRates (symbol,period,timeposition, 1 ,rates);
      
      returntick.curtime = rates[ 0 ].time;
      returntick.open = rates[ 0 ].open;
      returntick.close = rates[ 0 ].close;
      returntick.high = rates[ 0 ].high;
      returntick.low = rates[ 0 ].low;
      returntick.priceask = last_tick.ask;
      returntick.pricebid = last_tick.bid;
      
       return (returntick);

   } 

Ayrıca başka bir işlevi de çağırıyorum:


 string timeis = returntick(period, 1 ).curtime;

Ve arkasındaki hafıza nasıl temizlenir?

Silmede(TickReturn); İşlenen istisna hatası aldım.

 
hamsteruser :

İşaretçili bir işlev var:


Ayrıca başka bir işlevi de çağırıyorum:


Ve arkasındaki hafıza nasıl temizlenir?

Silmede(TickReturn); İşlenen istisna hatası aldım.


Kodunuzu doğru okuyorsam, TickReturn bir sınıftır. Bu sınıfın tipine sahip bir değişken için bir işaretçi yarattınız. ve yok et... sınıfın kendisini ??? İşaretçiyi yok etmeniz ve önce var olduğunu ve dinamik olduğunu kontrol etmeniz gerekir.

 
Алексей Барбашин :

Kodunuzu doğru okuyorsam, TickReturn bir sınıftır. Bu sınıfın tipine sahip bir değişken için bir işaretçi yarattınız. ve yok et... sınıfın kendisini ??? İşaretçiyi yok etmeniz ve önce var olduğunu ve dinamik olduğunu kontrol etmeniz gerekir.


*dönüş tiki de yok edilmez. Sadece ticaret terminalinin egzozu ile kafam karıştı. Temizlenmemiş bellek hakkında yazar.