Kodlama yardımı.. Uyarı yerine filtrelenecek göstergeyi nasıl alabilirim? - sayfa 4

 
Aaragorn:
Ben buna kaynattım...ama bekle...

eğer bu sadece yüksek bir nokta bulmak için bu çubuğun 3,5 ile çarpılan basit hareketli ortalamasını kullanıyorsa. Noktanın buna ulaşması nasıl mümkün olabilir? Aynı çubuktan hesaplanan hat değeri, sinyal vermek için ona dokunmak zorunda değil mi? Çubuk yükseldikçe kenar çizgisi de yükselir???

1 bardan daha fazla hesaplanırsa hareketli ortalama yani satır 1 değer ve fiyat başka olabilir

 
elihayun:
Üst çizginin fiyata yakın olup olmadığını bilmek istiyorsanız, aralarındaki farkın küçük olup olmadığını öğrenmenin bir yolu (diyelim ki 2 puan).

Fiyatın çizginin altında veya çizginin üstünde olması umurumda değil (ki bu iyi bir fikir değil). Benim için 2 puan mesafe, hepsi bu. yani fark

üst - Yüksek size farkı verir ama puan olarak vermez (0.0004 veya -0.0004 gibi bir şeydir). Farkın pozitif olduğundan emin olmak için mutlak (pozitif) değeri döndüren MathAbs fonksiyonunu kullanıyoruz. Şimdi 2 puandan az olup olmadığını kontrol etmeliyiz. Ayrılmış kelime Noktası , fiyat 1 pip arttığında değeri döndürür. Her çiftte farklıdır.

Hepsini bir araya getirmek

if (MathAbs(upper - High) < 2*Point) , farkın 2 pipten az olması ve bizim için yeterince yakın olması anlamına gelir.

Aslında Yüksek'i kullanmak iyi değil, çünkü Yüksek belki yukarıda ama şu anki fiyat çok uzak. High yerine Ask kullanmalıyız (göstergede Close[x] kullanmalıyız)

Fiyatın çizginin üzerinde olduğundan emin olmak için bunu yapabiliriz

if ((Ask > upper) && (Ask - upper < 2 * Point))

.....(alert or open a trade)

[/PHP]

bir çok soruma cevap vermekte çok iyisin umarım seni yormuyorumdur Öğrenmeye hevesliyim.

Mutlak değeri anlıyorum. Acaba kapanış yerine sormayı kullanmak neyi değiştirirdi? yakın kullanmak iyi olmaz mı? yoksa çok fark eder mi? hala kafamı karıştıran tek şey ikinci koşulun 2* puanlık tarafı. Puan 2 ile çarpılmaz mı? '*' sembolünü yanlış mı yorumluyorum yoksa bu çarpma sembolü mü?

Ask-upper'ın üst satır ile mevcut talep değeri arasındaki farkı verdiğini görüyorum. ama noktayı 2 ile çarparak mı? Bunun neyle sonuçlanacağından emin değilim, karşılaştırma için kullanılabilir.

Bunu, yalnızca filtrelenmiş satın alma toleransımın altında sinyal oluştuğunda satın almalara izin vermek için yapabilir miyim?

[php]

dış çift uzun menzilli = 25; //--alışverişe izin verilmeden önce üst bant çizgisine yaklaşmaya izin verilen yakınlık

dış çift kısa mesafe = 20; //--satışlara izin verilmeden önce alt bant çizgisine yaklaşmaya izin verilen yakınlık

// GİRİŞ

if(toplam < 2 || isNewSumbol(Symbol())) // if koşulunu da değiştirdim: toplam<1 (veya BanAway diğer adıyla cucurucu)

{

double HedgeLots = (HedgePercent/100)*Lots; // Hedge edilen pozisyon için Lotları hesaplar

if(isCrossed == 1 && Sor < üst-uzun menzilli)

{

if(UseStopLoss)

bilet=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Puan,Ask+TakeProfit*Puan,yorum,MAGICMA,0,Green);

başka

bilet=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Puan,yorum,MAGICMA,0,Yeşil);

if(bilet>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SATIN AL emri açıldı : ",OrderOpenPrice());

}

else Print("SATIN AL emri açılırken hata oluştu : ",GetLastError());
 

bir şeyi kaçırıyorsun. Point olayını anlamak için şunu hayal edin

USDJPY'de fiyat 114.95'tir ve EURUSD'de fiyat 1.2773'tür.

USDJPY'de Ask - üst şöyle olacaktır: 114.95 - 114.93 = 0.02

ve EURUSD'de fiyat 1.2773 - 1.2771 = 0.0002 olacaktır.

Her ikisi de 2 puan ama farklı hassasiyette bu yüzden USDJPY'de 2'yi 0,01 ile çarpmamız gerekiyor ve EURUSD'de bunu 0,0001 ile çarpmamız gerekiyor ve her çiftte bu tam olarak Point'e eşit.

 
elihayun:
1 bardan daha fazla hesaplanırsa hareketli ortalama yani satır 1 değer ve fiyat başka olabilir

kesinlikle! nasıl sadece bir çubuğun ortalaması olabilir?

//----------channel filter

int x = 0;

double middle2= iMA(NULL, 0, back, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

double avg;

avg = findAvg(back, x);

double upper = middle2 + (3.5*avg);

double lower = middle2 - (3.5*avg); [/PHP]

I don't see how this works....also the compiler say, 'findAvg' - function is not defined

it's looking for the shift value x which is zero so that is only going to be the current bar right? So what is it averaging?

ok let me see what might be...if i'm telling it to go 'back' 300 periods that is what it's averaging is 300 periods. ok i get it now i think....

now about the undefined function error? what do I do about that? just get rid of it as unnecessary?

[PHP]//----------channel filter

int x = 0;

double middle2= iMA(NULL, 0, back, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

double avg;

avg = (back, x);

double upper = middle2 + (3.5*avg);

double lower = middle2 - (3.5*avg);
 
elihayun:
bir şeyi kaçırıyorsun. Point olayını anlamak için şunu hayal edin

USDJPY'de fiyat 114.95'tir ve EURUSD'de fiyat 1.2773'tür.

USDJPY'de Ask - üst şöyle olacaktır: 114.95 - 114.93 = 0.02

ve EURUSD'de fiyat 1.2773 - 1.2771 = 0.0002 olacaktır.

Her ikisi de 2 puan ama farklı hassasiyette bu yüzden USDJPY'de 2'yi 0,01 ile çarpmamız gerekiyor ve EURUSD'de bunu 0,0001 ile çarpmamız gerekiyor ve her çiftte bu tam olarak Point'e eşit.

tamam sorunu görüyorum...yapmak istediğim şey, üst ve alt çizgilere yakınlığa dayalı bir bariyer oluşturmak, bunun ötesinde ticarete izin verilmeyecek.

-yani önce satırın mevcut değerini alıyorum.

-sonra 1=1 pip hareket olarak düşündüğüm bir tamsayı olarak takas edilemez olarak tanımlamak istediğim mesafeyi ekliyorum veya çıkarıyorum.

-o zaman karşılaştırma koşulunu yapmak için her bir tik için fiyatın nerede olduğu değerini almam gerekiyor

öyleyse bu satır 'price_Typical' dışında bir şey mi olmalı?

double middle2= iMA(NULL, 0, back, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

Farklı hassasiyetlerin bir soruna neden olmasını nasıl önleyeceğimden emin değilim. Tek yapmak istediğim, fiyatın hareketini, 'bu seviyenin üzerinde uzun işlem yapma' veya 'bu seviyenin altında kısa işlem yapma' belirleyecek olan çizginin hareketine göre karşılaştırmak..

Beynimin lapaya dönüştüğü bir molaya hazırım.

 

PRICE_TYPICAL'in bununla hiçbir ilgisi yok. MQL4 yardımında bununla ilgili okuyabilirsiniz

fiyat ve hat arasındaki farkı bulmak için tek yapmanız gereken, birini diğerinden çıkarmak. Dediğim gibi, sorun şu ki bazen 0.0006 ve bazen 0.06 elde ediyorsunuz ve bu Nokta çözüyor.

(Şimdi kapatmam gerekiyor, yarın devam edebiliriz)

 
elihayun:
bir şeyi kaçırıyorsun. Point olayını anlamak için şunu hayal edin

USDJPY'de fiyat 114.95'tir ve EURUSD'de fiyat 1.2773'tür.

USDJPY'de Ask - üst şöyle olacaktır: 114.95 - 114.93 = 0.02

ve EURUSD'de fiyat 1.2773 - 1.2771 = 0.0002 olacaktır.

Her ikisi de 2 puan ama farklı hassasiyette bu yüzden USDJPY'de 2'yi 0,01 ile çarpmamız gerekiyor ve EURUSD'de bunu 0,0001 ile çarpmamız gerekiyor ve her çiftte bu tam olarak Point'e eşit.

yani nokta, gereken farklı hassasiyetten bağımsız olarak her çiftte pip hareketini izlemek gibidir?

 
elihayun:
PRICE_TYPICAL'in bununla hiçbir ilgisi yok. MQL4 yardımında bununla ilgili okuyabilirsiniz

fiyat ve hat arasındaki farkı bulmak için tek yapmanız gereken, birini diğerinden çıkarmak. Dediğim gibi, sorun şu ki bazen 0.0006 ve bazen 0.06 elde ediyorsunuz ve bu Nokta çözüyor.

(Şimdi kapatmam gerekiyor, yarın devam edebiliriz)

sabrınız ve teşvikiniz için çok teşekkür ederim

 

Yaptığım bu....

//----------channel filter

double upLevel = iCustom(NULL,TF, "Trend Bands v2", back, 0, 0);

double LowLevel = iCustom(NULL,TF, "Trend Bands v2", back, 2, 0);

// ENTRY

if(total < 2 || isNewSumbol(Symbol())) //I have modified the if condition too: it was total<1 (orBanAway aka cucurucu)

{

double HedgeLots = (HedgePercent/100)*Lots; //calculates the Lots for the hedged position

if(isCrossed == 1 && Ask < upLevel-longrange)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

//###################################################################### the added code starts here

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

//###################################################################### ends here

return(0);

}

if(isCrossed == 2 && Ask > LowLevel + shortrange)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

//###################################################################### the added code starts here

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

//###################################################################### ends here

return(0);

}

return(0);

}

return(0);

}

return(0);

}

}

//+------------------------------------------------------------------+[/PHP]

this is what I got from the tester....

[PHP]2006.06.30 11:18:09 2006.06.06 14:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.06 12:14 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.06 10:26 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.05 22:47 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.05 09:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 08:41 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 07:30 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 07:29 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:08 2006.06.02 19:55 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:08 2006.06.01 11:27 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 06:45 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 04:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 02:44 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 00:37 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:00 2006.05.31 04:00 Trend Bands v2 EURUSD,M30: loaded successfully

2006.06.30 11:18:00 EMA_CROSSv5 EURUSD,M5: Tester comment: ----------------------------------------

TakeProfit=10 | TrailingStop=20 | StopLoss=20 | UseStopLoss=False

----------------------------------------

immediate_trade=True | reversal=False

----------------------------------------

Lots=1 | MM=True | Risk=10%

----------------------------------------

2006.06.30 11:18:00 EMA_CROSSv5 inputs: TakeProfit=10; TrailingStop=20; StopLoss=20; ShortEma=1; LongEma=5; Lots=1; HedgePercent=1; StartHour=0; StopHour=23; Risk=10; MAGICMA=20060301; longrange=1; shortrange=1; back=30; TF=30;

2006.06.30 11:17:35 EMA_CROSSv5: loaded successfully

rapor, ayarları aldığını ancak boş olduğunu gösteriyor ....

belli ki işlemlere izin vermiyor ama TÜMÜ? Sadece uzun ve kısa aralıkları 1 olarak ayarladığımda buna inanmakta zorlanıyorum!! Elbette bu aralıkta BAZI ticaret sinyalleri var mıydı? Bunun amaçladığım şeyi yaptığını sanmıyorum.

Dosyalar:
mac5.htm  5 kb
 

Trend bantları göstergesini daha esnek olması için değiştirdim

extern int period = 34;

extern int factor = 8;

avg = findAvg(period, x);

upper[x] = middle2 + (factor*avg);

lower[x] = middle2 - (factor*avg);[/PHP]

then i did this to the EA

//---- Trend Bands v2 and Filter Parameters

extern double back = 300; //--how many periods back for the custom indicator to average

extern double bandwidth = 6; //--how wide the trend bands are

extern double TF = 30; //--which bar period for the custom indicator to use

//----------channel filter

double upLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 0, 0);

double LowLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 2, 0);

I got this from the tester...(slightly abbreviated report)..

[PHP]2006.06.30 12:10:38 2006.06.29 23:59 Trend Bands v3 EURUSD,M30: removed

2006.06.30 12:10:38 2006.06.29 20:21 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:21 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:20 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:20 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:16 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:16 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:15 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:15 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:12 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:12 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:04 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:04 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:03 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:03 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:00 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:00 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:00 Trend Bands v3 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 12:10:38 2006.06.29 19:59 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:59 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:32 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:32 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:25 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:25 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:21 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:21 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:20 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:20 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:09 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:09 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:08 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:08 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:06 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:06 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 18:35 Trend Bands v3 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 12:10:38 2006.06.29 18:16 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 18:16 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 18:15 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 18:15 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:37 2006.06.29 00:00 Trend Bands v3 EURUSD,M30: loaded successfully

2006.06.30 12:10:37 EMA_CROSSv5 EURUSD,M5: Tester comment: ----------------------------------------

TakeProfit=10 | TrailingStop=20 | StopLoss=20 | UseStopLoss=False

----------------------------------------

immediate_trade=True | reversal=False

----------------------------------------

Lots=1 | MM=True | Risk=10%

----------------------------------------

2006.06.30 12:10:37 EMA_CROSSv5 inputs: TakeProfit=10; TrailingStop=20; StopLoss=20; ShortEma=1; LongEma=5; Lots=1; HedgePercent=1; StartHour=0; StopHour=23; Risk=10; MAGICMA=20060301; back=300; bandwidth=6; TF=30;

Bundan sonra bant genişliğini 20'ye çıkardım, böylece bantlara asla dokunmaz...hala bana '131 açılırken hata veriyor'

ERR_INVALID_TRADE_VOLUME 131 Geçersiz işlem hacmi .

bunda ne var

Neden: