Nasıl kodlanır? - sayfa 6

 

Hata Kodu: 4109

Herkese merhaba:

Bekleyen emirler de dahil olmak üzere tüm işlemleri kapatmak için bir komut dosyası yazdım, ancak test ettikten sonra hayal kırıklığına uğradım. İşlevler: OrderClose ve Orderdelete, işlemleri kapatmada başarısız olur. GetLastError işlevini çağırarak hata başlık dosyasında TRADE_NOT_ALLOWED olarak tanımlanan 4109 hata kodunu alıyorum.

Hatta platformla birlikte gelen komut dosyalarını çalıştırmayı denedim ama başarılı olamadım.

Umarım birisi sorunu çözebilir.

Teşekkürler,

Dosyalar:
closeall2.mq4  2 kb
 

Tamam, bunu dene. Lot ve Fiyat değişkeninin tamsayı değil çift olması gerektiğini düşünüyorum. Umarım bu yardım

//+------------------------------------------------------------------+

//| CloseAll.mq4 |

//| FX5 |

//| |

//+------------------------------------------------------------------+

#property copyright "FX5"

#property link " "

//+------------------------------------------------------------------+

//| script program start function |

//+------------------------------------------------------------------+

int start()

{

//----

int Ticket,Lots,Price,Type,Result;

int Error=0;

int Total=OrdersTotal();

for(int i=0;i<Total;i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==0)

{

Alert("Can''t select the order indexed: ",i);

Alert("Error code is ", GetLastError());

Error++;

}

else

{

/* Lots=OrderLots();

Ticket=OrderTicket();

Type=OrderType();*/

Result=0;

/* if(Type==OP_BUY)

Price=Bid;

if(Type==OP_SELL)

Price=Ask;*/

// if(Type==OP_BUY || Type==OP_SELL)

if(OrderType()<=OP_SELL)

{

Alert(OP_BUY," ",OP_SELL," ",Type);

// Result=OrderClose(Ticket,Lots,Price,5,Blue);

if(OrderType()==OP_BUY) Result=OrderClose(OrderTicket(),OrderLots(),Bid,5,Blue);

if(OrderType()==OP_SELL) Result=OrderClose(OrderTicket(),OrderLots(),Ask,5,Blue);

}

else

{

Result=OrderDelete(OrderTicket());

}

if(Result==0)

{

Alert("Can''t close the Order number: ",i," with Ticket: ",Ticket);

Alert("Error Code: ",GetLastError());

Error++;

}

}

}

if(Error!=0)

Alert(Error," Errors have occured");

else

Alert("Close all Orders Succeeded with no Errors");

//----

return(0);

}

//+------------------------------------------------------------------+
 

bunu dene

FX5:
Herkese merhaba:

Bekleyen emirler de dahil olmak üzere tüm işlemleri kapatmak için bir komut dosyası yazdım, ancak test ettikten sonra hayal kırıklığına uğradım. İşlevler: OrderClose ve Orderdelete, işlemleri kapatmada başarısız olur. GetLastError işlevini çağırarak hata başlık dosyasında TRADE_NOT_ALLOWED olarak tanımlanan 4109 hata kodunu alıyorum.

Hatta platformla birlikte gelen komut dosyalarını çalıştırmayı denedim ama başarılı olamadım.

Umarım birisi sorunu çözebilir.

Teşekkürler,

Metatrader'da araçlar -> seçenekler'e gidin, uzman danışman sekmesine tıklayın ve canlı ticarete izin ver'i seçin ve dll ithalatına izin ver'i tıklayın ve aramaları onayla seçeneğinin işaretini kaldırın. Birkaç komut dosyası yazdım ve aynı sorunu yaşıyordum.

 
firedave:
Tamam, bunu dene. Lot ve Fiyat değişkeninin tamsayı değil çift olması gerektiğini düşünüyorum. Umarım bu yardım
//+------------------------------------------------------------------+

//| CloseAll.mq4 |

//| FX5 |

//| |

//+------------------------------------------------------------------+

#property copyright "FX5"

#property link " "

//+------------------------------------------------------------------+

//| script program start function |

//+------------------------------------------------------------------+

int start()

{

//----

int Ticket,Lots,Price,Type,Result;

int Error=0;

int Total=OrdersTotal();

for(int i=0;i<Total;i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==0)

{

Alert("Can''t select the order indexed: ",i);

Alert("Error code is ", GetLastError());

Error++;

}

else

{

/* Lots=OrderLots();

Ticket=OrderTicket();

Type=OrderType();*/

Result=0;

/* if(Type==OP_BUY)

Price=Bid;

if(Type==OP_SELL)

Price=Ask;*/

// if(Type==OP_BUY || Type==OP_SELL)

if(OrderType()<=OP_SELL)

{

Alert(OP_BUY," ",OP_SELL," ",Type);

// Result=OrderClose(Ticket,Lots,Price,5,Blue);

if(OrderType()==OP_BUY) Result=OrderClose(OrderTicket(),OrderLots(),Bid,5,Blue);

if(OrderType()==OP_SELL) Result=OrderClose(OrderTicket(),OrderLots(),Ask,5,Blue);

}

else

{

Result=OrderDelete(OrderTicket());

}

if(Result==0)

{

Alert("Can''t close the Order number: ",i," with Ticket: ",Ticket);

Alert("Error Code: ",GetLastError());

Error++;

}

}

}

if(Error!=0)

Alert(Error," Errors have occured");

else

Alert("Close all Orders Succeeded with no Errors");

//----

return(0);

}

//+------------------------------------------------------------------+

Bu yanlış olabilir: birden fazla siparişi silmek için, silme işleminden sonra endeksleri azaldığı için sonuncudan başlamalısınız.

Yani, " for(int i=0;i=0;i--)" yerine

 

Kod değişikliği için firedave'e teşekkürler. Dikkat etmediğim küçük bir hataydı.

Crepuscular, ipucu için çok teşekkür ederim. Çözümü bulmadan önce bir yüzyıl geçirebilirdim. Son olarak, çalışan bir kodum var.

 

Michel, bu çok zekice bir nottu, çok teşekkür ederim.

 

maksimum aşağı çekme işlevini al

kapatılan ticaretten maksimum düşüşü alan bir fonksiyon yazmak istiyorum. iki çözüm ürettim.

1. İşlem hala aktifken düşüşü hesaplayın. numarayı global bir değişkene kaydetmek ve veriyi bilet numarasına göre dosyaya yazmak. MT4'ün her zaman çevrimiçi olması gerekirdi.

2. 1 dakikalık grafikten en yüksek veya en düşük en düşük değeri alarak düşüşü elde edin. Buradaki sorun, ticaret için 1 dakikalık geçmişe sahip olmamız gerektiğidir. (Daha önce indirilmemişlerse gerekli 1 dakikalık çubukları alabilseydim bu yöntemi kullanırdım)

Maksimum düşüş elde etmenin daha güzel bir yolunu bulmak istiyorum.

Herhangi bir girdi takdir edilmektedir.

 
harriss:
kapatılan ticaretten maksimum düşüşü alan bir fonksiyon yazmak istiyorum. iki çözüm ürettim.

1. İşlem hala aktifken düşüşü hesaplayın. numarayı global bir değişkene kaydetmek ve veriyi bilet numarasına göre dosyaya yazmak. MT4'ün her zaman çevrimiçi olması gerekirdi.

2. 1 dakikalık grafikten en yüksek veya en düşük en düşük değeri alarak düşüşü elde edin. Buradaki sorun, ticaret için 1 dakikalık geçmişe sahip olmamız gerektiğidir. (Daha önce indirilmemişlerse gerekli 1 dakikalık çubukları alabilseydim bu yöntemi kullanırdım)

Maksimum düşüş elde etmenin daha güzel bir yolunu bulmak istiyorum.

Herhangi bir girdi takdir edilmektedir.

selam harris,

"Çekilme" ile ne demek istediniz?

Kapanan işlemlerden birinin maksimum kaybının gerçekleştiğini mi kastediyorsunuz?

 

düşüş

Düşüşten kastım, ticaretteki en düşük nokta nedir. Örneğin, ticaret stoploss'a ulaşırsa, stoploss düşüş olur. Şimdi, işlem olumlu yönde sonuçlanırsa ve bir noktada -15 pip olsaydı, düşüş 15 olur. Son olarak, işlem -15 pipte kapanırsa ancak bir noktada -30 ise, düşüş 30 olur.

 

Göstergeler için Uyarılar/Alarmlar Nasıl Kodlanır?

Merhaba, uyarıların nasıl kodlanacağı hakkında daha fazla bilgi edinmek istiyorum.

Ben bir programcı değilim ama omuzlarımda bir kafam var ve genellikle bir şeyi kurcalayabilir, parçalara ayırabilir ve istediğim şekle daha yakın bir şekilde tekrar bir araya getirebilirim.

Uyarıları olan bazı göstergeleri inceledim ve gördüğüm genel uyarı işlevlerini, uyarı almak istediğim diğer göstergelere kopyaladım. Karışık sonuçlar elde ettim.

Uyarılar için çağrılan ana işlevlerin Alert() işlevi, Comment() işlevi ve Playsound() işlevi olduğunu fark ettim. Şimdiye kadar en çok Alert() işlevine aşinayım. Örneğin Alert() ve Playsound() arasında önemli bir fark var mı?

Sahip olduğum genel sorun, uyarıları nasıl kodlayacağımı yeterince bilmememdir, böylece ikisi de bir yandan fark edilir, ancak diğer yandan gülünç bir şekilde dikkat dağıtmaz. Örneğin, bazı çarpı işaretleri için Alert() işlevi kullanılıyorsa ve gösterge geçerli çubukta kesin olarak yazdırılmamışsa, uyarı defalarca tekrarlanabilir ve uyarıyı kapatmakta sorun yaşıyorum. Genellikle grafiğin zaman çerçevesini değiştirmem gerekir.

Her şeyden önce, yalnızca geçerli çubuk için uyarıyı devre dışı bırakmanın/devre dışı bırakmanın basit bir yolu var mı?

İkincisi, yineleme sayısını kısıtlayan veya uyarıya sabit bir süre veren bir kod ekleyerek bitmeyen can sıkıcı bir sıkıntı olmaması için bir uyarıyı kodlamanın bir yolu var mı? Nasıl kodlarsın?

Gördüğüm bir çözüm, uyarıyı bir sonraki çubuğa kadar geciktirmek, böylece sürekli değişmeyecek, ancak bu, zamanında olmama dezavantajına sahip.

Göstergelerdeki çılgın alarmların zorluğunu önlemek için, birinin terminal penceresini kullanarak ayarlayabildiği önceden belirlenmiş fiyat uyarılarını kullandım ve yardımcı oluyor ama ideal değil.

Ayrıca, Uzman Danışmanların uyarı vermek için oluşturulabileceğini ve uyarılarını kolayca açıp kapatabilecek bir düğme olduğunu biliyorum. Ancak EA'larla ilgili sorunum, MetaTrader ile aynı anda çalıştırdığım bir diğer önemli programın, Uzman Danışmanlar etkinleştirildiğinde ve yavaş çalıştığında parazit yaşadığını fark etmem.

Bu soruna başka çözümler var mı?

Numaralandırdığım tuzaklardan kaçınan ve nasıl kodlanacağına ve uyarılacağına dair iyi bir örnek teşkil edebilecek bir uyarı koduna sahip herhangi bir gösterge varsa, lütfen beni ona yönlendirebilir ve/veya gönderebilir misiniz?

Çok teşekkürler.

Neden: