[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 60

 
7777877 : Parametreleri referansa göre geçiren parametrelerden geçiliyor mu?

burada referansa göre parametreler geçiyor, şöyle bir komut dosyası yapın:

 int start(){
   int res = 999 ;
   Print ( "func = " ,func(res), " , res = " ,res);
return ( 0 );
}
//__________________________
int func( int &a){
   a = 10 ;
   return (a* 10 );
}

uzmanlar sekmesinde bir giriş görünecek: 2012.04.08 11:19:35 EURUSD testi,M5: func = 100, res = 10

peki neden res = 999 atadığımız sorusunu yanıtlamaya çalışın; ve günlükte res = 10 var

 

Kütüphaneleri nasıl dahil edeceğimi söyler misin? Mqh dosyalarında bulunurlar, ancak derlerken verir

'strlib.mqh' - program dosyasını açamıyor

 
IgorM :

burada referansa göre parametreler geçiyor, şöyle bir komut dosyası yapın:

uzmanlar sekmesinde bir giriş görünecek: 2012.04.08 11:19:35 EURUSD testi,M5: func = 100, res = 10

peki neden res = 999 atadığımız sorusunu cevaplamaya çalışın; ve günlükte res = 10 var


Valla benim açıklamam şu:

Yazdır işlevinde, kullanıcı tanımlı işlev işlevine bir çağrı yapılır. res=999 parametresi func işlevine iletilir. func fonksiyonunun kendisi hesaplanırken, a=10 parametresi kullanılır. Ve a*10=100 değeri işlev çağrısına geri gönderilir. Çünkü sonunda res=10 değerine sahibiz, sonra buradan bir parametreyi referans yoluyla geçirmenin aşağıdaki anlama geldiği sonucuna varıyorum: çağrılan fonksiyona (bu durumda res=999) karşılık gelen türden HERHANGİ bir değeri iletebilirsiniz. case, func), ancak fonksiyonun kendisi, fonksiyonun kendi içinde başlatılacak olan (bu, belirli bir durumda, geçen değerle çakışabilir) bu değerle (yani, bu durumda, a=10) hesaplanacaktır. çağrılan işleve, yani bu durumda func'ta). Ve fonksiyonda (bu durumda, func'ta) hesaplanan değeri fonksiyon çağrı dizgisine geri ilettiğinizde, değişken (bu durumda, res) zaten öncekinden farklı bir değere sahip olacaktır, yani. func işlevini değerlendirirken elde ettiği şey (yani, bu durumda res=10). Toplam: hesaplanan fonksiyonun içinde referans yoluyla bir fonksiyona parametre iletirken, parametre değeri değişebilir ve daha sonra, hesaplanan değer fonksiyon çağrısı dizgisine döndürüldükten sonra, bu parametrede zaten DEĞİŞTİRİLMİŞ olacaktır (belirli bir durumda, aynı) çağrılan işlevin değerlendirmesini aldığı değer.

doğru mu anladım

 
7777877 : Hesaplanan bir fonksiyonun içindeki referans yoluyla bir fonksiyona parametre iletmek , parametrenin değerini değiştirebilir
Evet kesinlikle
 
IgorM :
Evet kesinlikle

Harika danke schön!!!
 

Lütfen söyleyin, siparişte bir değişiklik yapmak istiyorum, böylece danışman belirttiğim zamanda stop loss değerini değiştirir ve o da dalga geçmeye başlar.

işte kodum

harici int tp = 350; // kar değerini al
harici int sl = 400; // kayıp değerini durdur

int bileti;

int başlangıç()
{
//----
if (OrdersTotal()==0 && Hour( )==2 && Minute( )==0) // emir terminal saatiyle 14:00'de açılır
bilet=OrderSend(Symbol(),OP_SELL,1,Bid,0,Ask+sl*Point,Ask-tp*Point,"",123,0,Red);

//----

if (OrdersTotal()==1 && Hour( )==3 && Minute( )==0) // burada seçilen biletle sipariş değişikliğinin saat 3:00'te yapılması koşulunu belirledim terminal. zaman.

{
OrderSelect(bilet, SELECT_BY_TICKET, MODE_TRADES); // belirtilen sipariş seçimi, burada anlaşmalar
OrderModify(ticket, OrderOpenPrice(), Ask+300*Puan, OrderTakeProfit(),0,Mavi); // açık pozisyon fiyatından seçilen bilet ile emri değiştirin, SL değerini puan olarak değiştirin, TP'yi değiştirmeden bırakın


}
//--

}


Test yaparken bir Sorun çıkar: Expert Advisor 3 saat 00 dakikadan 3 59 dakikaya kadar olan süre içinde birçok gereksiz değişiklik yapmaya başlar.Danışman her saniye aptalca bir değişiklik yapar! NİYE YA? kodda yanlış olan ne?

 
oleg_felix :

Lütfen söyleyin, siparişte bir değişiklik yapmak istiyorum, böylece danışman belirttiğim zamanda stop loss değerini değiştirir ve o da dalga geçmeye başlar.

işte kodum

harici int tp = 350; // kar değerini al
harici int sl = 400; // kayıp değerini durdur

int bileti;

int başlangıç()
{
//----
if (OrdersTotal()==0 && Hour( )==2 && Minute( )==0) // emir terminal saatiyle 14:00'de açılır
bilet=OrderSend(Symbol(),OP_SELL,1,Bid,0,Ask+sl*Point,Ask-tp*Point,"",123,0,Red);

//----

if (OrdersTotal()==1 && Hour( )==3 && Minute( )==0) // burada seçilen biletle sipariş değişikliğinin saat 3:00'te yapılması koşulunu belirledim terminal. zaman.

{
OrderSelect(bilet, SELECT_BY_TICKET, MODE_TRADES); // belirtilen sipariş seçimi, burada anlaşmalar
OrderModify(ticket, OrderOpenPrice(), Ask+300*Puan, OrderTakeProfit(),0,Mavi); // açık pozisyonun fiyatından seçilen biletle emri değiştirin, SL değerini puan olarak değiştirin, TP'yi değiştirmeden bırakın


}
//--

}


Test yaparken bir Sorun çıkar: Expert Advisor 3 saat 00 dakikadan 3 59 dakikaya kadar olan süre içinde birçok gereksiz değişiklik yapmaya başlar.Danışman her saniye aptalca bir değişiklik yapar! NİYE YA? kodda yanlış olan ne?



Neden zamanla.....karla!!

 

Aynı anda stop ve kar koyamayacağınız, ancak değişiklik yoluyla yapmanız gereken bir ECN hesabında açık bir emri değiştirmek için doğru fonksiyon nasıl yazılır.

Genel olarak, sorun şu ki, bir şeyler yanlış, hatayı bulmama yardım et.

harici int tp = 350; // kar değerini al
harici int sl = 400; // kayıp değerini durdur

int bileti;
int başlangıç()
{
//----
if (OrdersTotal()==0 && Close [1]< Open [1] && High [ 1 ]< Bid ) )==0) // şartlara göre sipariş açılır
bilet=SiparişGönder(Symbol(),OP_SELL,1,Teklif,0,0,0t,"",123,0,Kırmızı);
//----
if (Sipariş Toplamı()==1 ) // burada sipariş değişikliğinin bir sipariş seçili olması koşulunu ayarladım.
{
OrderSelect(bilet, SELECT_BY_TICKET, MODE_TRADES); // belirtilen sipariş seçimi, burada anlaşmalar
OrderModify(ticket, OrderOpenPrice(), Ask+sl*Point,Ask-tp*Point,0,Mavi); // açık pozisyon fiyatından seçilen bilet ile emri değiştirin, SL değerini puan olarak değiştirin, TP'yi değiştirmeden bırakın
}
}

 
oDin48 :
  • Beyler, kütüphaneler nasıl bağlanır? EA'yı derlemeye çalıştığımda verdiği

  • 'strlib.mqh' - program dosyasını açamıyor

Ve satırı bulun:
 #include <strlib.mgh>

ve şununla değiştirin:

 #include <stdlib.mgh>
 
7777877 :

İnsanlar, birini erişilebilir bir biçimde açıklayın, parametrelerin ne olduğunu referansla açıklayın. Belgeleri okudum, ancak yalnızca oradan bunun mümkün olduğunu anladım ve değişkeni tanımladıktan sonra & değiştiricisini koymak gerekiyor. Açıklamaya açıklamalarla birlikte küçük bir program eşlik etseydi harika olurdu... Parametreleri referans ile geçirmek ile parametreleri geçmek arasındaki genel fark nedir?

Bir parametreyi referans yoluyla iletmenin genel anlamı, bir parametreye değişkenin kendisine değil, adresine iletmektir. Aksi takdirde, değişkenin bir kopyası parametreye iletilir.