Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Nesne adındaki seçili metin dizesine dayalı nesneleri silmenin bir yolu var mı?
İşte örnek:
tarihsaat currentDay = StrToTime(Yıl()+"."+Ay()+"."+Gün()+" 00.00");
for(int i=0;i<ObjectsTotal();i++)
{
dizi adı = NesneAdı(i);
if( ObjectGet(name,OBJPROP_TIME1) < currentDay && ObjectGet(name,OBJPROP_TIME2) < currentDay && ObjectGet(name,OBJPROP_TIME3) < currentDay)
{
ObjectDelete(NesneAdı(i));
dönüş (yanlış);
}
}
dönüş(doğru);
Öğrenme projelerimden biri, Strateg Tester için grafik görüntüleme seçeneğini yöneten tester.tpl'yi özelleştirmekle ilgili. Varsayılan grafik stilini görselleştirmeyi çok zor buluyorum. Bu yüzden yeni bir şablon oluşturdum ve ardından tüm okları daha çekici oklarla değiştirmek için bir komut dosyası oluşturdum.
Ancak, ok adlarındaki bilgileri de almak ve bunu grafikte metin olarak görüntülemek istiyorum. Ok adları, "#62 satın al" veya "73 sat kapat" gibi öğeleri içerir. Bu şekilde, grafiğe bakabilir ve belirli bir ticaretin # ne zaman girildiğini/çıkıldığını tam olarak görebilirsiniz. Bunun neden diğer platformlarda olduğu gibi (örn. TradeStation) Strateji Test Cihazına varsayılan olarak dahil edilmediğini bilmiyorum.
Her neyse, söz konusu metni alıp grafikteki mevcut okların hemen altına yeni metin nesneleri eklemek istiyorum. Ancak, bunu nasıl başaracağımı çözemiyorum.
Bunu nasıl yapacağım?
teşekkürler
FaturaPeki, komut dosyası yazabilir veya ok bilgisini okuyacak ve altında metin etiketi yapacak şekilde işlev görebilirsin. Ardından, yeni bir ok çizildiğinde komut dosyasını çalıştırın. Veya işlevi, ea'nın ana işlevinin sonuna yerleştirin. Bu bilginin neden metatrader'da standart olmadığını bilmiyorum, ancak bu tür bir işlevi kodlamak basit.
U, Tarih ve Saat işlevlerini okumalı ve belirtilen aydaki ilk çubuğun belirtilen zaman diliminden kaymasını almak için iBarShift işlevini kullanmalıdır.
Biliyorum senin için önemsiz olmalı. Sınırlı belgeleri takip ederek henüz elde edemiyorum (orada verilen pek fazla örnek yok). Bunun nasıl yapılacağına dair bir örnek verebilir misiniz?
teşekkürler
Fatura
Peki, komut dosyası yazabilir veya ok bilgisini okuyacak ve altında metin etiketi yapacak şekilde işlev görebilirsin. Ardından, yeni bir ok çizildiğinde komut dosyasını çalıştırın. Veya işlevi, ea'nın ana işlevinin sonuna yerleştirin. Bu bilginin neden metatrader'da standart olmadığını bilmiyorum, ancak bu tür bir işlevi kodlamak basit.
Teşekkürler, ancak özellikle betiği nasıl kodlayacağım konusunda takıldım. Kısa bir örnek vermek için zamanınız varsa, bu çok takdir edilecektir.
Tekrar teşekkürler.
Fatura
Takip ettiğimden emin değilim. Açık olmak gerekirse, bir nesne adına dayalı bir alt dize eşleşmesi yapmanın bir yolunu arıyorum. Örneğin, içinde "-206" dizesi olan bir grup nesnem olduğunu varsayalım (diğer metinlerle birlikte). Adında "-206" olan tüm nesneleri bulup silmek istiyorum.
Aşağıdaki örnekte kafamı karıştıran, OBJPROP_TIME1, OBJPROP_TIME2 ve OBJPROP_TIME3 ile olan ilişkidir. Nesnelerin en fazla üç zaman koordinatına sahip olabileceğini biliyorum. Bunun yapmaya çalıştığım şeyle nasıl uyuştuğunu takip etmiyorum.
İşte örnek:
tarihsaat currentDay = StrToTime(Yıl()+"."+Ay()+"."+Gün()+" 00.00");
for(int i=0;i<ObjectsTotal();i++)
{
dizi adı = NesneAdı(i);
if( ObjectGet(name,OBJPROP_TIME1) < currentDay && ObjectGet(name,OBJPROP_TIME2) < currentDay && ObjectGet(name,OBJPROP_TIME3) < currentDay)
{
ObjectDelete(NesneAdı(i));
dönüş (yanlış);
}
}
dönüş(doğru);Takip ettiğimden emin değilim. Açık olmak gerekirse, bir nesne adına dayalı bir alt dize eşleşmesi yapmanın bir yolunu arıyorum. Örneğin, içinde "-206" dizesi olan bir grup nesnem olduğunu varsayalım (diğer metinlerle birlikte). Adında "-206" olan tüm nesneleri bulup silmek istiyorum. Aşağıdaki örnekte kafamı karıştıran, OBJPROP_TIME1, OBJPROP_TIME2 ve OBJPROP_TIME3 ile olan ilişkidir. Nesnelerin en fazla üç zaman koordinatına sahip olabileceğini biliyorum. Bunun yapmaya çalıştığım şeyle nasıl uyuştuğunu takip etmiyorum.
Tamam, şunu deneyin:
for(int i=0;i<ObjectsTotal();i++)
{
dizi adı = NesneAdı(i);
if(StringSubstr( isim, 0, 3)==206)
{
ObjectDelete(NesneAdı(i));
}
}
Nesne adının ilk 3 harfi 206 ise nesne silinecektir.
Teşekkürler, ancak özellikle betiği nasıl kodlayacağım konusunda takıldım. Kısa bir örnek vermek için zamanınız varsa, bu çok takdir edilecektir.
Tekrar teşekkürler.
Faturailk önce global değişkeni (komut dosyası için global) tanımlayın int objectCount;
daha sonra, ea'nın sonunda tüm nesneleri işleyin (örneğin, onları ada göre arayabilirsiniz)
for(int i=0;i>=ObjectsTotal( OBJ_ARROW ) ;i++)
{
//o zaman nesne etiketi yoksa çizelim diyelim
// mevcut okun adı ve onu tanımlamak için ona L etiketi ekleyin
if(ObjectFind(NesneAdı(i)+"L")== -1)
{
ObjectCreate(ObjectName(i)+"L",OBJ_ARROW,0,ObjectGet(ObjectName(i), OBJPROP_TIME1),ObjectGet(ObjectName(i),(OBJPROP_PRICE1+3*Nokta)));
// Ve işte bu
}
}
Bu sadece bir örnek, olası hatalar için kontrol edecek zamanım yok ama bu işe yaramalı ve şimdi doğru yolu biliyorsunuz.
Peki. Anladım. Aslında StringFind() kullanmam gerekiyordu . İşaretçiler için teşekkürler!
#özellik show_inputs
harici string stringname="blah";
//+------------------------------------------- -------------------+
//| komut dosyası programı başlatma işlevi |
//+------------------------------------------- -------------------+
int başlangıç()
{
//----
for(int i=0;i<ObjectsTotal();i++)
if(StringFind(ObjectName(i),stringname,0)>0)
{
ObjectDelete(NesneAdı(i));
}
Tamam, şunu deneyin:
for(int i=0;i<ObjectsTotal();i++)
{
dizi adı = NesneAdı(i);
if(StringSubstr(isim, 0, 3)==206)
{
ObjectDelete(NesneAdı(i));
}
}
Nesne adının ilk 3 harfi 206 ise nesne silinecektir.Teşekkürler, ama bu işe yaramıyor. İlk olarak, "i>=ObjectsTotal" öğesini "i<=ObjectsTotal" (yazım hatası) olarak değiştirdim. Ardından, ok nesnesinin adını içeren yeni bir metin nesnesi oluşturmak istediğimiz yerde başka bir ok nesnesi oluşturduğunuzu fark ettim. Her neyse, aşağıdaki kod, hepsi aynı koordinatlarda örtüşen bir grup ok (yaklaşık 50) oluşturuyor.
Bu konuda hala kayıp. Bir kez daha bakma şansınız varsa, bu çok makbule geçer. Açık olmak gerekirse, metin nesnesinin metin açıklamasının ok nesnesinin adına eşit olduğu her mevcut ok nesnesinin altına konumlandırılan yeni bir metin nesnesi oluşturmak istiyorum.
Fatura
ilk önce global değişkeni (komut dosyası için global) tanımlayın int objectCount;
daha sonra, ea'nın sonunda tüm nesneleri işleyin (örneğin, onları ada göre arayabilirsiniz)
for(int i=0;i>=ObjectsTotal(OBJ_ARROW) ;i++)
{
//o zaman nesne etiketi yoksa çizelim diyelim
// mevcut okun adı ve onu tanımlamak için ona L etiketi ekleyin
if(ObjectFind(NesneAdı(i)+"L")== -1)
{
ObjectCreate(ObjectName(i)+"L",OBJ_ARROW,0,ObjectGet(ObjectName(i), OBJPROP_TIME1),ObjectGet(ObjectName(i),(OBJPROP_PRICE1+3*Nokta)));
// Ve işte bu
}
}
Bu sadece bir örnek, olası hatalar için kontrol edecek zamanım yok ama bu işe yaramalı ve şimdi doğru yolu biliyorsunuz.içerik tabanlı nesne silme
Nesne adındaki seçili metin dizesine dayalı nesneleri silmenin bir yolu var mı?
Düzenleme: Kalenzo'dan bir işaretçi ile anladım. Cevap 212 nolu mesajda.