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
son mum detayı
Merhaba,
son mumun yüksek, düşük, açılış ve kapanış değerini göstermek için bir göstergeye ihtiyacınız var...
O zaman neden takip eden bir durdurma kullanmıyorsunuz? Demek istediğim, orijinal fikrinizin neredeyse% 100'ünü (neredeyse) yapardı ve kodlaması çok, çok daha kolay
Mesele şu ki (doğru ifade ettiğimi veya %100 doğru olmadığımı düşünüyorum) stoplar (şimdilik zaten) tüm işlem boyunca aynı kalacak. Bunun gibi bir yaklaşıma ne dersiniz, iki işlem açıkken, bir kod açık emirlerin sayısını kontrol edebilir, eğer 1'in üzerindeyse (temelde 2), o zaman her iki işlemin de kârları , öncekinden daha yüksek olan belirli bir miktara değiştirilir. Esasen burada bir tür riskten korunma işlemi yapılıyor.
Teşekkürler,
madmax3
[langtitle=pl]Proszę veya pomoc w napisaniu EA działającego n[/langtitle]
[lang=pl]Witam czy bugł tarafından ktoś mi to dopracować był rym wdzięczny : Chciałbym rzeby kupywał LevelRSIbuy=20; bir sprzeawał jak dojdzie LevelRSIsell=80; MagicNumber'ın mahremiyetini biliyorum.
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESEL 4
#property telif hakkı "Uzman Danışman Oluşturucu"
#özellik bağlantısı "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"
harici int SihirliSayı = 0;
harici bool SignalMail = Yanlış;
extern bool EachTickMode = True;
harici çift Lot = 0.1;
extern int Kayma = 1;
extern bool UseStopLoss = True;
harici int StopLoss = 10;
extern bool UseTakeProfit = True;
harici int TakeProfit = 5;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;
harici int LevelRSIbuy=20;
harici int LevelRSISell=80;
int BarCount;
int Akım;
bool TickCheck = Yanlış;
//+------------------------------------------- -------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- -------------------+
int init() {
BarCount = Barlar;
if (EachTickMode) Akım = 0; başka Akım = 1;
dönüş(0);
}
//+------------------------------------------- -------------------+
//| uzman sıfırlama işlevi |
//+------------------------------------------- -------------------+
int tanım() {
dönüş(0);
}
//+------------------------------------------- -------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- -------------------+
int start() {
int Sıra = SIGNAL_NONE;
int Toplam, Bilet;
çift StopLossLevel, TakeProfitLevel;
if (EachTickMode && Çubuklar != BarCount) TickCheck = False;
Toplam = SiparişlerToplam();
Sıra = SIGNAL_NONE;
//+------------------------------------------- -------------------+
//| Değişken Başlangıç |
//+------------------------------------------- -------------------+
double Var1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Cari + 0);
double Buy1_1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Cari + 0);
double Sell1_1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Cari + 0);
//+------------------------------------------- -------------------+
//| Değişken Son |
//+------------------------------------------- -------------------+
//Konumu kontrol et
bool IsTrade = Yanlış;
for (int i = 0; i < Toplam; ben ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = Doğru;
if(OrderType() == OP_BUY) {
//Kapat
//+------------------------------------------- -------------------+
//| Sinyal Başla(Çıkış Satın Al) |
//+------------------------------------------- -------------------+
//+------------------------------------------- -------------------+
//| Sinyal Sonu(Çıkış Satın Al) |
//+------------------------------------------- -------------------+
if (Sipariş == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Barlar != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Sinyal Uyarısı]", "[" + Symbol() + "] " + DoubleToStr(Teklif, Rakamlar) + " Satın Alma Kapat");
if (!EachTickMode) BarCount = Çubuklar;
IsTrade = Yanlış;
devam etmek;
}
//Sondaki durdurma
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Nokta * TrailingStop) {
if(OrderStopLoss() < Teklif - Nokta * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Çubuklar;
devam etmek;
}
}
}
} başka {
//Kapat
//+------------------------------------------- -------------------+
//| Sinyal Başla(Çıkış Sat) |
//+------------------------------------------- -------------------+
//+------------------------------------------- -------------------+
//| Sinyal Sonu (Çıkış Sat) |
//+------------------------------------------- -------------------+
if (Sipariş == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Barlar != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Sinyal Uyarısı]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Kapat Satış");
if (!EachTickMode) BarCount = Çubuklar;
IsTrade = Yanlış;
devam etmek;
}
//Sondaki durdurma
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Sor) > (Nokta * TrailingStop)) {
if((OrderStopLoss() > (Sor + Nokta * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Çubuklar;
devam etmek;
}
}
}
}
}
}
//+------------------------------------------- -------------------+
//| Sinyal Başlıyor(Giriş) |
//+------------------------------------------- -------------------+
if (Yanlış) Sıra = SIGNAL_BUY;
if (Yanlış) Sıra = SIGNAL_SELL;
//+------------------------------------------- -------------------+
//| Sinyal Sonu |
//+------------------------------------------- -------------------+
//Satın almak
if (Sipariş == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Barlar != BarCount)))) {
if(!IsTrade) {
// Serbest marjı kontrol et
if (AccountFreeMargin() < (1000 * Lot)) {
Print("Paramız yok. Serbest Marj = ", AccountFreeMargin());
dönüş(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Puan; başka StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Sor + TakeProfit * Puan; başka TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lot, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Bilet > 0) {
if (OrderSelect(Bilet, SELECT_BY_TICKET, MODE_TRADES)) {
Print("Satın alma emri açıldı : ", OrderOpenPrice());
if (SignalMail) SendMail("[Sinyal Uyarısı]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Satın Alımı Aç");
} başka {
Print("SATIN AL emri açılırken hata oluştu : ", GetLastError());
}
}
if (EachTickMode) TickCheck = Doğru;
if (!EachTickMode) BarCount = Çubuklar;
dönüş(0);
}
}
//Satmak
if (Sipariş == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Barlar != BarCount)))) {
if(!IsTrade) {
// Serbest marjı kontrol et
if (AccountFreeMargin() < (1000 * Lot)) {
Print("Paramız yok. Serbest Marj = ", AccountFreeMargin());
dönüş(0);
}
if (UseStopLoss) StopLossLevel = Teklif + StopLoss * Puan; başka StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Teklif - TakeProfit * Puan; başka TakeProfitLevel = 0.0;
Bilet = OrderSend(Symbol(), OP_SELL, Lot, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sat(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Bilet > 0) {
if (OrderSelect(Bilet, SELECT_BY_TICKET, MODE_TRADES)) {
Print(" SAT emri açıldı : ", OrderOpenPrice());
if (SignalMail) SendMail("[Sinyal Uyarısı]", "[" + Symbol() + "] " + DoubleToStr(Teklif, Rakamlar) + " Açık Satış");
} başka {
Print("SATIŞ emrini açarken hata: ", GetLastError());
}
}
if (EachTickMode) TickCheck = Doğru;
if (!EachTickMode) BarCount = Çubuklar;
dönüş(0);
}
}
if (!EachTickMode) BarCount = Çubuklar;
dönüş(0);
}
//+------------------------------------------- -------------------+[/lang]
Açık işlemlerin karını artırmak için bu kodu kullanmaya çalışıyorum (eğer iki açık işlem ise).
if(OrderType()==OP_BUY)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue);
if(OrderType()==OP_SELL)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue);toplam=SiparişToplam(); btw.
Yine de çalıştıramıyorum, herhangi bir öneriniz var mı?
Teşekkürler,
madmax3
Günlük İşlem Sayısını 1 ile Sınırlandırmaya Yardımcı Olun
Programlamada yeniyim ve MQL4'te yardıma ihtiyacım var. Bazı kodlayıcı kılavuzlarını inceledim ve alım satım stratejime göre alım satımların nasıl açılıp kapatılacağını anladım. Benim zorluğum günlük işlem sayısını 1 ile sınırlamak. Günde 1'den fazla işlem açmak istemiyorum (sunucu saatine göre). Bu yüzden bugün bir siparişin açılıp açılmadığını görmek için açık ve kapalı siparişleri kontrol etmek istiyorum. Bugün bir sipariş açıldıysa, o gün için ek sipariş açmayın.
Lütfen yardım et.
Not: EA'nızın bir MagicNumber parametresine (tam ad) sahip olduğunu varsayar
PPS: güne kadar olan zaman dilimlerinde çalışacaktır. Haftalık ve aylık grafiklerde düzgün çalışmayacak
Programlamada yeniyim ve MQL4'te yardıma ihtiyacım var. Bazı kodlayıcı kılavuzlarını inceledim ve alım satım stratejime göre alım satımların nasıl açılıp kapatılacağını anladım. Benim zorluğum günlük işlem sayısını 1 ile sınırlamak. Günde 1'den fazla işlem açmak istemiyorum (sunucu saatine göre). Bu yüzden bugün bir siparişin açılıp açılmadığını görmek için açık ve kapalı siparişleri kontrol etmek istiyorum. Bugün bir sipariş açıldıysa, o gün için ek sipariş açmayın. Lütfen yardım et.
[ langtitle =pl]Temayı Tema'ya Dönüştür(kapat,nokta)[/langtitle]
Witam
Jeszcze raz bo cos sie zle wkleilo. Jak przekazac wartosc funkcji Tema Var1 yapın. Jak robie tak jak w kodzie ponizej için Var1 jest pute.
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 DarkBlue
#property indicator_width1 2
//---- input parameters
extern int EMA_period=4;
//---- buffers
string txt;
double TemaBuffer[];
double Ema[];
double EmaOfEma[];
double EmaOfEmaOfEma[];
double Var1;
int Var2;
int i,limit,limit2,limit3;
extern int Apply_To_Price=1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(5);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,Var1);
SetIndexBuffer(1,TemaBuffer);
SetIndexBuffer(2,Ema);
SetIndexBuffer(3,EmaOfEma);
SetIndexBuffer(4,EmaOfEmaOfEma);
IndicatorShortName("TEMA("+EMA_period+")");
switch(Apply_To_Price)
{
case 1:
{txt="Open";break;}
case 2:
{txt="High";break;}
case 3:
{txt="Low"; break;}
case 4:
{txt="Median"; break;}
case 5:
{txt="Typical"; break;}
case 6:
{txt="WghtdClose"; break;}
default:
{txt="Close";}
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
int counted_bars=IndicatorCounted();
if (counted_bars==0)
{
limit=Bars-1;
limit2=limit-EMA_period;
limit3=limit2-EMA_period;
}
if (counted_bars>0)
{
limit=Bars-counted_bars-1;
limit2=limit;
limit3=limit2;
}
for (i=limit3;i>=0;i--)
{
Var1 = Tema(Apply_To_Price,4); //=======================TUTAJ JEST PROBLEM W VAR1 NIC NIE MA. DLACZEGO?
// Alert(Var1);
}
Var2 = dodawanie (2,3);
return(0);
}
double Tema(int Cena, int cykl)
{
//----
for (i=limit;i>=0;i--) Ema=iMA(NULL,0,cykl,0,MODE_EMA,Cena,i);
for (i=limit2;i>=0;i--) EmaOfEma=iMAOnArray(Ema,0,cykl,0,MODE_EMA,i);
for (i=limit3;i>=0;i--) EmaOfEmaOfEma=iMAOnArray(EmaOfEma,0,cykl,0,MODE_EMA,i);
for (i=limit3;i>=0;i--)
{
TemaBuffer=3*Ema-3*EmaOfEma+EmaOfEmaOfEma;
//Alert(TemaBuffer);
}
return(TemaBuffer);
}
int dodawanie (int a, int b)
{
int c;
c=a+b;
return(c);
}
Bunun gibi (TEMA)...
İşlev gibi istiyorsanız, bunun gibi bir şey olması gerekir:Örnek bir gösterge de eklemek. Fiyat türü yerine bir değer iletmenin avantajı, bu şekilde temayı herhangi bir değere uygulayabilmenizdir (bir fiyatın teması olmak zorunda değildir, örneğin başka bir göstergenin teması olabilir)
Witam
Jeszcze raz bo cos sie zle wkleilo. Jak przekazac wartosc funkcji Tema Var1 yapın. Jak robie tak jak w kodzie ponizej için Var1 jest pute.
[PHP]
#özellik göstergesi_chart_window
#özellik göstergesi_tamponları 1
#özellik göstergesi_renk1 KoyuMavi
#özellik göstergesi_width1 2
//---- giriş parametreleri
harici int EMA_period=4;
//---- arabellekler
dize txt'si;
çift TemaBuffer[];
çift Ema[];
çift EmaOfEma[];
double EmaOfEmaOfEma[];
çift Var1;
int Var2;
int i,limit,limit2,limit3;
harici int Apply_To_Price=1;
//+------------------------------------------- -------------------+
//| Özel gösterge başlatma işlevi |
//+------------------------------------------- -------------------+
int init()
{
//---- göstergeler
GöstergeTamponları(5);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,Var1);
SetIndexBuffer(1,TemaBuffer);
SetIndexBuffer(2,Ema);
SetIndexBuffer(3,EmaOfEma);
SetIndexBuffer(4,EmaOfEmaOfEma);
GöstergeShortName("TEMA("+EMA_period+")");
geçiş(Apply_To_Price)
{
dava 1:
{txt="Aç";kır;}
durum 2:
{txt="Yüksek";kırılma;}
durum 3:
{txt="Düşük"; kırmak;}
durum 4:
{txt="Medyan"; kırmak;}
durum 5:
{txt="Tipik"; kırmak;}
durum 6:
{txt="WghtdKapat"; kırmak;}
varsayılan:
{txt="Kapat";}
}
//----
dönüş(0);
}
//+------------------------------------------- -------------------+
//| Özel gösterge sıfırlama işlevi |
//+------------------------------------------- -------------------+
int tanım()
{
//----
//----
dönüş(0);
}
//+------------------------------------------- -------------------+
//| Özel gösterge yineleme işlevi |
//+------------------------------------------- -------------------+
int başlangıç()
{
//----
int counted_bars=IndicatorCounted();
if (counted_bars==0)
{
limit=Bar-1;
limit2=limit-EMA_period;
limit3=limit2-EMA_period;
}
if (counted_bars>0)
{
limit=Barlar-sayılan_barlar-1;
limit2=limit;
limit3=limit2;
}
(i=limit3;i>=0;i--) için
{
Var1 = Tema(Apply_To_Fiyat,4); //=======================TUTAJ JEST PROBLEM W VAR1 NIC NIE MA. DLACZEGO?
// Uyarı(Var1);
}
Var2 = dodawanie (2,3);
dönüş(0);
}
çift Tema(int Cena, int cykl)
{
//----
(i=limit;i>=0;i--) için Ema=iMA(NULL,0,cykl,0,MODE_EMA,Cena,i);
for (i=limit2;i>=0;i--) EmaOfEma=iMAOnArray(Ema,0,cykl,0,MODE_EMA,i);
for (i=limit3;i>=0;i--) EmaOfEmaOfEma=iMAOnArray(EmaOfEma,0,cykl,0,MODE_EMA,i);
(i=limit3;i>=0;i--) için
{
TemaBuffer=3*Ema-3*EmaOfEma+EmaOfEmaOfEma;
//Uyarı(TemaBuffer);
}
dönüş(TemaBuffer);
}
int dodawanie (int a, int b)
{
int c;
c=a+b;
dönüş(c);
}
HAMMER koduyla ilgili yardım lütfen
Merhaba,
mql4'te yeni başlıyorum. Aşağıdaki göstergeye sahip şamdanlarda siyah beyaz çekiçler seçmeye çalışmak. Ancak, grafikte bazen şamdanlar yanlış tanımlama metni alır (beyaz çekiç mum, siyah çekiç mum olarak tanımlanır ve bunun tersi de geçerlidir). Lütfen bu durumda bana yardım edin, şimdiden teşekkürler.
#özellik göstergesi_chart_window
int limiti;
//---- arabellekler
sicim çekici[20000];
//+------------------------------------------- -------------------+
//| CuStom göstergesi başlatma işlevi |
//+------------------------------------------- -------------------+
int init()
{
dönüş(0);
}
//+------------------------------------------- -------------------+
//| CuStor göstergesi sıfırlama işlevi |
//+------------------------------------------- -------------------+
int tanım()
{
//----
ObjectsDeleteAll(çekiç,OBJ_TEXT);
//----
dönüş(0);
}
//+------------------------------------------- -------------------+
//| CuStom göstergesi yineleme işlevi |
//+------------------------------------------- -------------------+
int başlangıç()
{
int N;
int N1;
int N2;
dize metni;
int counted_bars=IndicatorCounted();
limit=Barlar-sayılan_barlar;
for(N = 1; N < limit; N++) {
çekiç[N]= CharToStr(N);
N1 = N+1;
N2 = N + 2;
//----
//---- olası hataları kontrol et
if(counted_bars<0) {
Alert("Çubuk YOK..");
dönüş(-1);
}
// Hammer White'ı kontrol et
if (((Kapat[N1]>Aç[N1]) && ((Aç[N1]-Düşük[N1])>=2*(Kapat[N1]-Aç[N1])) && ((Yüksek[N1]) -Kapat[N1])<=(Açık[N1]-Düşük[N1])*0.10))) {
ObjectCreate(çekiç[N], OBJ_TEXT, 0, Zaman[N1], Düşük[N1] - Nokta);
ObjectSetText(çekiç[N], "WHmr", 9, "Times New Roman", LawnGreen);
}
// Hammer Black'i kontrol et
if (((Kapat[N1]=2*(Aç[N1]-Kapat[N1])) && ((Yüksek[N1]-Aç[N1])<=(Kapat[N1]-Düşük[N1])* 0.10))) {
ObjectCreate(çekiç[N], OBJ_TEXT, 0, Zaman[N1], Düşük[N1] - Nokta);
ObjectSetText(çekiç[N], "BHmr", 9, "Times New Roman", LawnGreen);
}
//----
} // for döngüsünün sonu
dönüş(0);
}
//+------------------------------------------- -------------------+
Merhaba,
mql4'te yeni başlıyorum. Aşağıdaki gösterge ile şamdanlarda siyah beyaz çekiçler seçmeye çalışmak. Ancak, grafikte bazen şamdanlar yanlış tanımlama metni alır (beyaz çekiç mum, siyah çekiç mum olarak tanımlanır ve bunun tersi de geçerlidir). Lütfen bu durumda bana yardım edin, şimdiden teşekkürler.
#özellik göstergesi_chart_window
int limiti;
//---- arabellekler
dize çekici[20000];
//+------------------------------------------- -------------------+
//| CuStom göstergesi başlatma işlevi |
//+------------------------------------------- -------------------+
int init()
{
dönüş(0);
}
//+------------------------------------------- -------------------+
//| CuStor göstergesi sıfırlama işlevi |
//+------------------------------------------- -------------------+
int tanım()
{
//----
ObjectsDeleteAll(çekiç,OBJ_TEXT);
//----
dönüş(0);
}
//+------------------------------------------- -------------------+
//| CuStom göstergesi yineleme işlevi |
//+------------------------------------------- -------------------+
int başlangıç()
{
int N;
int N1;
int N2;
dize metni;
int counted_bars=IndicatorCounted();
limit=Barlar-sayılan_barlar;
for(N = 1; N < limit; N++) {
çekiç[N]= CharToStr(N);
N1 = N+1;
N2 = N + 2;
//----
//---- olası hataları kontrol et
if(counted_bars<0) {
Alert("Çubuk YOK..");
dönüş(-1);
}
// Hammer White'ı kontrol et
if (((Kapat[N1]>Aç[N1]) && ((Aç[N1]-Düşük[N1])>=2*(Kapat[N1]-Aç[N1])) && ((Yüksek[N1]) -Kapat[N1])<=(Açık[N1]-Düşük[N1])*0.10))) {
ObjectCreate(çekiç[N], OBJ_TEXT, 0, Zaman[N1], Düşük[N1] - Nokta);
ObjectSetText(çekiç[N], "WHmr", 9, "Times New Roman", LawnGreen);
}
// Hammer Black'i kontrol et
if (((Kapat[N1]=2*(Aç[N1]-Kapat[N1])) && ((Yüksek[N1]-Aç[N1])<=(Kapat[N1]-Düşük[N1])* 0.10))) {
ObjectCreate(çekiç[N], OBJ_TEXT, 0, Zaman[N1], Düşük[N1] - Nokta);
ObjectSetText(çekiç[N], "BHmr", 9, "Times New Roman", LawnGreen);
}
//----
} // for döngüsünün sonu
dönüş(0);
}
//+------------------------------------------- -------------------+Merhaba Svezir,
Mum kalıpları için bu göstergeye sahip olun belki yardımcı olur.