[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 77

 

Merhaba

lütfen bana kepçenin neden satın aldığını ve koşullar olgunlaştığında pozisyonu kapatmadığını söyleyin

/---- giriş parametreleri
harici int PerRSI=8;
harici int MagicNumber=77771;
dış çift Lot = 1.0;
//+------------------------------------------- --------------------+
int başlangıç()
{
int
cnt, // sipariş dizini
bilet, // sipariş kimlik numarası
Toplam; // zaten açılmış siparişlerin sayısı
çift
rsi_0, // Değer. rsi_0 akımı
rsi_1; // Değer. rsi_1 1. çubuk
if(çubuklar<100)
{
Print("100'den küçük barlar");
dönüş(0);
}
toplam=SiparişToplam();
if(toplam<1)
{
rsi_0=iRSI(NULL,0, PerRSI,0,0); // Geçerli çubuk
rsi_1=iRSI(NULL,0, PerRSI,0,1); // Geçerli çubuk artı 1

if(rsi_0 < rsi_1 && rsi_0 < 30) // Eğer çizgi 30'u geçerse
{
bilet=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green);
if(bilet>0)
{
if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))
Print(" SAT emri açıldı : ",OrderOpenPrice());
}
else Print("SATIŞ emrini açarken hata: ",GetLastError());
dönüş(0);
}
for(cnt=0;cnt<toplam;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_BUY && OrderSymbol()==Symbol()) // bu açık bir konum mu? OP_BUY veya OP_SELL
{
if(OrderType()==OP_BUY) // için pozisyon aç
{
if(rsi_0 > rsi_1 && rsi_0 > 70) // Çizgi 70'i geçerse
{
OrderClose(OrderTicket(),1,Bid,3,Violet); // pozisyonu kapat

dönüş(0); // çıkış
}}}}}}
 
KoZaNOStra >> :

bilet=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green);
if(bilet>0)
{
if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))
Print("SAT emri açıldı : ",OrderOpenPrice());
}


Bu ne ya? OrderSelect() ne için?


Gerisini anlamak zor çünkü. kod girintisiz düzenlenmiştir ve parantezleri takip etmek imkansızdır - görme yeteneğimi bozmak istemiyorum.

 
Takip eden hareketin görülebilmesi için tablo nasıl renklendirilir?
 
anat писал(а) >>

Yardımın için çok teşekkürler! Ve ayrıca akbaba - y. Şimdi başka bir bela. Burada örneğin 10 alış pozisyonu açtık. Bir durakta kapanırken veya 1,2,3 vb. pozisyonlar, danışman, satın almak için bir sinyal varsa, satın almaya başlar. Ve önce TÜM emirlerin kapanmasına ihtiyacım var ve ancak o zaman, tek bir açık pozisyon olmadığında yeni bir ticaret döngüsü başlar. Onlar. bir sayaç gerekir. İlk önce, belirli bir sayıya kadar pozisyonları açın ve ardından pozisyonları kapatırken sıfıra. Şimdiden teşekkürler.

Şimdi tam olarak böyle yapılıyor. En az bir açık emir olduğu sürece diğeri açılmayacaktır. Ve farklı bir şekilde yapmanız gerekiyorsa, daha kesin yazın. Ve zaten siz seçiyorsunuz - emirlerin açılıp açılmadığını, kjulf'un açık pozisyonları olup olmadığını veya açılmadığını.

 

Ve işte bir soru:

meta tüccarda herhangi bir hata ayıklama aracı var mı?

Lütfen deneyiminizi paylaşın - komut dosyalarında ve danışmanlarda nasıl hata ayıklarsınız?

hepsi sayılarla, parametrelerle, algoritmaların sonuçlarıyla vb. bağlantılıdır. Algoritmada ortaya çıkan hatalar nasıl yakalanır?

 
Ryan_ryan >> :

Ve işte bir soru:

meta tüccarda herhangi bir hata ayıklama aracı var mı?

Lütfen deneyiminizi paylaşın - komut dosyalarında ve danışmanlarda nasıl hata ayıklarsınız?

Hata ayıklamaya ihtiyaç varsa, Print () aracılığıyla

Ancak çoğu durumda bu gerekli değildir.

 

  RefreshRates();
  if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
  bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);  
  if (sellclose) 
  {
  PlaySound("money.wav");
  }
  else 
  {
  Print("Ошибка : ",Error(GetLastError()));
  PlaySound("timeout.wav");  
  }

Lütfen bu yapıda, siparişi kapattıktan sonra önce "timeout.wav" sesinin, kapatılan siparişlerin sayısına eşit "hata yok" sesinin neden olduğunu söyleyin (2 sipariş kapatılırsa, "hata yok" iki kez çıkacak, vb. .) ve ardından "money.wav" ". İşin garibi, bu sadece kısa işlemler için, uzun işlemler için her şey yolunda gidiyor. Neyin yanlış olduğunu ve nasıl düzeltileceğini bilen var mı?

 
Dimoncheg писал(а) >>

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Lütfen bu yapıda, siparişi kapattıktan sonra önce "timeout.wav" sesinin, kapatılan siparişlerin sayısına eşit "hata yok" sesinin neden olduğunu söyleyin (2 sipariş kapatılırsa, "hata yok" iki kez çıkacak, vb. .) ve ardından "money.wav" ". İşin garibi, bu sadece kısa işlemler için, uzun işlemler için her şey yolunda gidiyor. Neyin yanlış olduğunu ve nasıl düzeltileceğini bilen var mı?

Peki ya ilkinden sonra braket kapatılmazsa ???

if(OrderType()==OP_SELL && OrderMagicNumber()==mnum

Bir şekilde bu çizgi bir şekilde düşüyor

 
Dimoncheg >> :

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Lütfen bu yapıda, siparişi kapattıktan sonra önce "timeout.wav" sesinin, kapatılan siparişlerin sayısına eşit "hata yok" sesinin neden olduğunu söyleyin (2 sipariş kapatılırsa, "hata yok" iki kez çıkacak, vb. .) ve ardından "money.wav" ". İşin garibi, bu sadece kısa işlemler için, uzun işlemler için her şey yolunda gidiyor. Neyin yanlış olduğunu ve nasıl tedavi edildiğini bilen var mı?


1. koşullu if ifadesinin altındaki koşul, yalnızca onu izleyen ifade için geçerlidir (sonraki satır).

Gerisi KOŞULSUZ gerçekleştirilir. Onlar. Sırayı kapatmak için herhangi bir komut olmasa bile, çalma seslerinden biri çalışacaktır.

Böyle daha doğru:

   RefreshRates ( ) ;
   if ( OrderType ( ) = = OP_SELL & & OrderMagicNumber ( ) = = mnum ) 
   {
     bool sellclose = OrderClose ( OrderTicket ( ) , OrderLots ( ) , Ask , 3 , YellowGreen ) ;   
     if ( sellclose ) 
         PlaySound ( "money.wav" ) ;
     else 
     {
         Print ( "Ошибка : " , Error ( GetLastError ( ) ) ) ;
         PlaySound ( "timeout.wav" ) ;   
     }
   }
 
infinum13 >> :

Peki ya ilkinden sonra braket kapatılmazsa ???

if(OrderType()==OP_SELL && OrderMagicNumber()==mnum

Bir şekilde bu çizgi bir şekilde düşüyor

Kapanıyor, yanlışlıkla sildim, yoksa orada olmasa derlenmezdi, if(OrderType()==OP_SELL && OrderMagicNumber()==mnum düşer ama en eğlencelisi hem kısa hem de kısa için çalışıyor uzun işlemler, ancak "timeout.wav" sesiyle "Hata yok" hatası yalnızca kısa işlemler için çalışır, uzun işlemler için inşaat iyi çalışır, aynı parantezler vardır ve her şey aynı