Sormak! - sayfa 21

 
billworld2:
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);

 
billworld2:
Öğ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

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.

 
Kalenzo:
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

 
Kalenzo:
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.

Kalenzo:
İş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);
 
billworld2:
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.

 
billworld2:
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

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.

 

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));

}

Kalenzo:
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

Kalenzo:
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.