[Arşivle!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 2. - sayfa 81

 

extern bool SATIN AL = doğru;
harici int Sihir = 0;
harici çift Parti = 0.1;
harici int kar al = 0;
harici int stoploss = 0;
dış int kayma = 3;
çift SL,TP;
int(){
dönüş(0);
}
int başlangıç()
{
eğer (SATIN AL)
{
if (kar al!=0) TP = NormalizeDouble (Sor + kar al*Puan,Rakamlar); başkaTP=0;
if (stoploss!=0) SL = NormalizeDouble(Sor - stoploss*Nokta,Rakamlar); başkaSL=0;
OPENORDER("satın al");

AL=yanlış;
}

dönüş(0);
}
void OPENORDER(dize sırası)
{
dehşet içinde;
süre (doğru)
{ hata=doğru;
if (ord=="Buy") error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0){SATIN AL = yanlış;}
}
dönüş;
}

 
nemo811 :

Lütfen bir örnek verin. Daha yeni öğreniyorum ve henüz bayrağı koyma göreviyle karşılaşmadım. )
koda bakılırsa, bir siparişi açmadan önce tek bir yerde durum kontrolünüz var. sadece değişkeni false olarak değiştirin ve bu kadar, bir sonraki tikte program bu bloğa girmeyecek ve danışman yeniden başlatılıncaya kadar başka bir şey açmayacaktır.
 
nemo811 :

Lütfen bana EA'da bir koşulun yalnızca tek bir uygulamasına (örneğin, bir sipariş açma) nasıl izin vereceğimi ve bunu her onay işaretiyle tekrar etmemeye nasıl izin vereceğimi söyleyin. Aynı zamanda, bir pozisyonu kapatırken danışman yeni bir pozisyon açmamalıdır. Canlandırmaya çalıştım ama amaçlanan çıkmadı.

Şimdiden teşekkür ederim.



hata siparişi biletinin saklanacağı değişkeni neden adlandırdınız?

if (ord=="Buy") error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0){SATIN AL = yanlış;}

OrderSend () hakkında okuyun, sanırım sorular kendiliğinden kaldırılacak, şöyle bir şey yazacaktım:

 void OPENORDER( string ord)
{
int ticket = - 1 ;
 while (ticket< 0 )
 {ticket= OrderSend ( Symbol (),OP_BUY, Lot, NormalizeDouble (Ask, Digits ),slippage,SL,TP, "" ,Magic, 0 );
  sleep( 500 );
}
return ;
}
 
IgorM :



Belki biraz daha erken okudunuz, sorunumu dile getirdim. Bir çözüm bulmuşlar gibi görünüyor, ancak kitapta mql'de bir dize ile nasıl çalışılacağını bulamıyorum (

bir dizeden tek tek sayılar nasıl çıkarılır?

 
NameLess :


Belki biraz daha erken okudunuz, sorunumu dile getirdim. Bir çözüm bulmuşlar gibi görünüyor, ancak kitapta mql'de bir dize ile nasıl çalışılacağını bulamıyorum (

bir dizeden tek tek sayılar nasıl çıkarılır?


MQL4 dize işlevleriyle deney yapacak bir komut dosyası oluşturun - buraya bakın https://docs.mql4.com/ru/strings
 

SIFIR

örneğin hangi kurallara göre?

 
drknn :

MQL4 dize işlevleriyle deney yapacak bir komut dosyası oluşturun - buraya bakın https://docs.mql4.com/en/strings/StringSubstr

teşekkür etmek!
 
NameLess :


Belki biraz daha erken okudunuz, sorunumu dile getirdim. Bir çözüm bulmuşlar gibi görünüyor, ancak kitapta mql'de bir dize ile nasıl çalışılacağını bulamıyorum (

bir dizeden tek tek sayılar nasıl çıkarılır?

sayıyı bir dizgeye dönüştürmeniz gerekiyor https://docs.mql4.com/ru/convert/DoubleToStr

https://docs.mql4.com/en/strings/StringLen dizesinin bir kısmını https://docs.mql4.com/en/strings/StringSubstr başından kesmeniz gerekir

ve her şeyi gerçek türe geri dönüştürün https://docs.mql4.com/en/convert/StrToDouble

dizelerle çalışmak için gerekli tüm işlevler bu, belki StrToDouble () sizin için yeterlidir

ancak bu "çirkin şekilde" kesinlikle keseceksiniz ve sayıyı yuvarlamayacaksınız, başka bir seçenek daha var: gerçek sayıyı 10'un x kuvvetiyle çarpın ve sonucu int türüne atayın - değilsem yanlış, o zaman yuvarlama da olmayacak, sonra int'yi x derecesinde 10'a bölün

 
IgorM :

sayıyı bir dizgeye dönüştürmeniz gerekiyor https://docs.mql4.com/ru/convert/DoubleToStr

https://docs.mql4.com/en/strings/StringLen dizesinin bir kısmını https://docs.mql4.com/en/strings/StringSubstr başından kesmeniz gerekir

ve her şeyi gerçek türe geri dönüştürün https://docs.mql4.com/en/convert/StrToDouble

dizelerle çalışmak için gerekli tüm işlevler bu, belki StrToDouble () sizin için yeterlidir

ancak böyle "çirkin bir şekilde" kesinlikle keseceksiniz ve sayıyı yuvarlamayacaksınız, başka bir seçenek daha var: gerçek sayıyı 10'un kuvvetiyle çarpın ve sonucu int türüne atayın - eğer ben yanlış değil, o zaman yuvarlama da olmayacak, sonra int'yi x derece olarak 10'a bölün


En azından *kesmeliyim*, çünkü sayının göstergeden sadece bir çizgiye çekildiği ortaya çıkıyor .. tavsiye için teşekkürler, deneyeceğim)
 

IgorM :

İsimsiz:

Yardım için teşekkürler. Bayrağı ayarlamanın mantığını ve sipariş sayısını döndürme işlevini anladım. Ama aynı zamanda siparişin kapandığı an da ilgileniyorum. Bayrak koşulunun tekrar bir emir vermeyi amaçladığı ortaya çıktı ve iade fonksiyonu 1 daha az emir olduğunu söylüyor ve ayrıca bir pozisyon açmayı başlatıyor. Bir şey kaçırdıysam düzeltin.