Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 887

 
tuner :
void start() yapın ve hata olmayacak
Teşekkür ederim! Hata ortadan kalktı, ancak pozisyon hala kapanmadı.
 
rapid_minus :
Teşekkür ederim! Hata ortadan kalktı, ancak pozisyon hala kapanmadı.
Nedeninin tam olarak ne olduğunu söylemek için yeterli kod yok
 
tuner :
Nedeninin tam olarak ne olduğunu söylemek için yeterli kod yok


Parça:

geçersiz CritCloseBuy()
{
if (((Yellow_0-Red_0)<(Yellow_1-Red_1) && ((MA_0<MA_1)&&(MA_1>MA_2))) || ((Yellow_0-Red_0)>(Yellow_1-Red_1) && ((MB_0<MB_1) &&(MB_1>MB_2))))
süre(doğru)
{
ord_close=OrderClose(OrderTicket(),0.1,MarketInfo(OrderSymbol(),MODE_BID),0,Kırmızı);
if(ord_close=yanlış)
{
Comment(" BU pozisyonunun kapanması # hatasıyla sona erdi",GetLastError()); //Hata mesajı
kırmak;
}
başka
{
sipariş=0;
kırmak;
}

}

Belki de açılış nedeni:

voidCritOpen()
{
if (///açık koşul///)

süre(doğru)
{
bilet=SiparişGönder(Symbol(),OP_BUY,0.1,Ask,0,0,0,NULL,10011,0,clrNONE); // açık sipariş SATIN AL, MAGIC 10011
if(bilet<=0)
{
Comment("BY-10011 pozisyonunun açılması # hatasıyla sona erdi",GetLastError());

kırmak;
}
başka
{
Comment("Pozisyon BY-10011 açık, lot 0.1, fiyat", Sor);
Sıra=(Sır+1);
kırmak;
}
}

 
rapid_minus :


Parça:


...

önce ord_close=OrderClose(OrderTicket(),0.1,MarketInfo(OrderSymbol(),MODE_BID),0,Kırmızı);

OrderSelect() işlevini kullanarak bir sipariş seçmek güzel olurdu. Ve kapatma işlevi etrafında böyle bir döngü inşasında bir nokta görmüyorum ...

 
evillive :

önce ord_close=OrderClose(OrderTicket(),0.1,MarketInfo(OrderSymbol(),MODE_BID),0,Kırmızı);

OrderSelect() işlevini kullanarak bir sipariş seçmek güzel olurdu.

yani o benim için tek. Ama ilk başta böyleydi. Bu zaten yazarak nedenini aramaya başladım. Ve döngünün anlamını anlamıyorum.

Ben sadece benzetmeye tükürüyorum: Bir kez bir döngü ile açıldıktan sonra kapatılmalıdır ...

 

Igor Kim'de bizim örneğimiz var:

geçersiz başlangıç() {
ManagePosition();
}

//+------------------------------------------- ------------------------------+
//| Piyasa fiyatından kapanış pozisyonları |
//| Seçenekler: |
//| sym - enstrüman adı ("" - geçerli sembol) |
//| operasyon - operasyon (-1 - herhangi bir pozisyon) |
//| mn - MagicNumber (-1 - herhangi bir büyü) |
//+------------------------------------------- ------------------------------+
void ClosePositions(string sym="", int op=-1, int mn=-1) {
int i, k=SiparişToplam();

if (sym=="") sym=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sym && (op<0 || OrderType()==op)) {
if (mn<0 || OrderMagicNumber()==dk) {
if (OrderType()==OP_BUY) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
}
if (OrderType()==OP_SEL) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
}
}
}
}
}
}

Ancak derleyici, OrderClose'un dönüş değerinin kontrol edilmesini gerektirir.

 
rapid_minus :

Igor Kim'de bizim örneğimiz var:


Ancak derleyici, OrderClose'un dönüş değerinin kontrol edilmesini gerektirir.

Peki, örnekteki gibi yapın - önce seçim, sonra kapanış. Tek veya bir milyon sipariş, fark etmez, önce her birini seçmeniz gerekir.

Ve kontrolü düzenlemek oldukça kolaydır if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell)) Print("Kapanış hatası #", GetLastError() );

 
rapid_minus :

Igor Kim'de bizim örneğimiz var:

...

Ancak derleyici, OrderClose'un dönüş değerinin kontrol edilmesini gerektirir.

Bunun nedeni, Igor'un işlevlerini yazdığı günlerde, derleyicinin dönüş değerini kontrol etmeyi gerektirmemesi ve modern derleyicinin kontrol etmezseniz yemin etmesidir.
 
evillive :

Peki, örnekteki gibi yapın - önce seçim, sonra kapanış. Tek veya bir milyon sipariş, fark etmez, önce her birini seçmeniz gerekir.

Ve bir çek düzenlemek oldukça kolaydır if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell)) Print("Kapanış hatası #", GetLastError());

Bunu yaptım: if (!OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red))
{
Comment(" BU pozisyonunun kapanması # hatasıyla sona erdi",GetLastError());
kırmak;
}
başka
{
sipariş=0;
kırmak;
}

"Dönüş değeri" gerektiren tutarlar kontrol edilmelidir.

Böyle mi yaptı:

ord_close=OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red);
if(ord_close=yanlış)
{
Comment("BU pozisyonunun kapatılması # hatasıyla sona erdi",GetLastError()); //Hata mesajı
kırmak;
}
başka
{
sipariş=0;
kırmak;
}

Sessiz. Ama her iki durumda da pozisyonu kapatmaz.

Not: Bana öyle geliyor ki pozları kapatma ve açma koşullarını belirlemede bir hata var

Yukarıdaki gönderi, yakın bir koşul örneği sağlar. Orada yanlış ne olabilir?

 
rapid_minus :

Sessiz. Ama her iki durumda da pozisyonu kapatmaz.

Not: Bana öyle geliyor ki, pozları kapatma ve açma koşullarını belirlemede bir hata var

Yukarıdaki gönderi, yakın bir koşul örneği sağlar. Orada yanlış ne olabilir?

Sessizce, hatasız kapanmazsa, kapanma koşulu uygun değildir. Bu durumu yeniden düşünmemiz ve yeniden yazmamız gerekiyor.

Burada parantezler bir şekilde düzenlenmemiş:

if (((Yellow_0-Red_0)<(Yellow_1-Red_1) && ((MA_0<MA_1)&&(MA_1>MA_2))) || ((Yellow_0-Red_0)>(Yellow_1-Red_1) && ((MB_0<MB_1)&&(MB_1>MB_2))))

Ya böyleyse?

if (((Yellow_0-Red_0<Yellow_1-Red_1) && (MA_0<MA_1 && MA_1>MA_2)) || ((Yellow_0-Red_0>Yellow_1-Red_1) && (MB_0<MB_1 && MB_1>MB_2)))