[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 391

[Deleted]  
splxgf >> :


Şimdi koda daha dikkatli baksam da yarım litre olmadan anlayamazsınız, şimdi ICQ'mu atacağım, orada ne yaptığımı açıklamaya çalışacağım.

ÖĞLEDEN SONRA? Tamam ben bekliyorum)

[Deleted]  
Jahspear >> :

Herkese tekrar tekrar merhaba, kendime cevap veremediğim bir soru.

Bir koşul göründüğünde sipariş vermeyi eğitmek için bir Uzman Danışman yazıyorum. Görev basit: sadece bir pozisyon ticareti yapmak. Böylece fiyat MA10'dan daha yüksekse - satın alın, daha düşükse - satın. Ayrıca, sipariş sihirlerini kullanma olasılığını da test ediyorum - böylece uzman tam olarak kendisinin verdiği emirleri kapatıyor. Ayrıca, diyelim ki, alış ve satış koşullarının ikinci bir versiyonu var (henüz eklemedim). Ve böylece, emrin hangi koşula ait olduğunu kendisi belirler - sihir, bir pozisyonun açılmasına neden olan işlevde ayarlanır. Ayrıca şartlara göre en başta pozisyon olup olmadığına karar vermeli ve ya satın almak için koşullar aramaya ya da satmak için koşullar aramaya başlamalıdır.


İşte kod:


// Мувинг и цена
double MA10;
double Price;
// Есть или нет позиция и ее номер
int Pos;
int Magic;
double Lot=0.1;
double SL;
double TP;
int Slippage=3;

//--------------------------------------------------------------------

void start()
{
MA10 = iMA(NULL,0,10,0,0,0,0);
Price = Bid;

CheckPos();
}

//--------------------------------------------------------------------

void CheckPos()
{
if(Pos==0)
CheckBuy();
CheckSell();
}

//--------------------------------------------------------------------
// Поиск условий для покупки и продажи
//--------------------------------------------------------------------

void CheckBuy()
{
if (NormalizeDouble(Price,Digits) > NormalizeDouble(MA10,Digits))
Magic=10;
Buy();
return;
}

//--------------------------------------------------------------------

void CheckSell()
{
if (NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits))
Sell();
return;
}

//--------------------------------------------------------------------
// Выставление ордеров
//--------------------------------------------------------------------

void Buy()
{
string Symb=Symbol();
Pos=1;

OrderSend(Symb, OP_BUY, Lot, Ask, Slippage, SL, TP, NULL, Magic);
return;
}
//--------------------------------------------------------------------

void Sell()
{
Pos=0;
OrderClose(Magic, Lot, Bid, Slippage);
return;
}


Ve işte burada, enfeksiyon, yalnızca bir pozisyonda işlem yapması gerekmesine rağmen (eğer varsa - satış koşulları arıyoruz, hayır - satın alma koşulları arıyoruz), çok sayıda pozisyon açıyor, ve sonra onları kapatmaz. Ben zaten kafamı kırdım. Bana neyin yanlış olduğunu söyle?



Buraya bakın https://docs.mql4.com/en/trading/OrdersTotal.....
[Deleted]  
renoshnik >> :


Buraya bakın https://docs.mql4.com/en/trading/OrdersTotal.....

Evet teşekkürler. Şu anda denedim. Şimdi çok pozisyon açmıyor. Şimdi bir tane açılıyor ve kapanmıyor. Sihirli bir şey...?

[Deleted]  
İşte https://www.mql5.com/en/code/9178 Kodu olabildiğince yorumlamaya çalıştım.... Belki faydası olur....
[Deleted]  
renoshnik >> :
Вот здесь https://www.mql5.com/ru/code/9178 я старался максимально комментировать код.... Может поможет....

Orada, trolün tüm kapanışları gerçekleşir. Ve anladığım kadarıyla siparişleri nasıl kapatacağımı tam olarak yakalayamıyorum. Kodumda, OrderClose'da hata, bilet numarası yerine sihirbazın numarasıdır. Şu anda oradaki bilet numarasını nasıl alacağımı bulmaya çalışıyorum ...

[Deleted]  
Jahspear >> :

Orada, trolün tüm kapanışları gerçekleşir. Ve anladığım kadarıyla siparişleri nasıl kapatacağımı tam olarak yakalayamıyorum. Kodumda, OrderClose'da hata, bilet numarası yerine sihirbazın numarasıdır. Şu anda oradaki bilet numarasını nasıl alacağımı bulmaya çalışıyorum ...

Hepsi anlaşıldı. Herkese teşekkürler, işte doğru çözüm:


// Мувинг и цена
double MA10;
double Price;
// Есть или нет позиция и ее номер
int Total=0;
int Magic=0;
double Lot=0.1;
double SL;
double TP;
int Slippage=3;

//--------------------------------------------------------------------

void start()
{
MA10 = iMA(NULL,0,10,0,0,0,0);
Price = Bid;
Total = OrdersTotal();

CheckPos();
}

//--------------------------------------------------------------------

void CheckPos()
{
if(Total==0)
CheckBuy();
if(Total>0)
CheckSell();
}

//--------------------------------------------------------------------
// Поиск условий для покупки и продажи
//--------------------------------------------------------------------

void CheckBuy()
{
if (NormalizeDouble(Price,Digits) > NormalizeDouble(MA10,Digits))
{
Magic=10;
Buy();
}
return;
}

//--------------------------------------------------------------------

void CheckSell()
{
if (NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits))
Sell();
return;
}

//--------------------------------------------------------------------
// Выставление ордеров
//--------------------------------------------------------------------

void Buy()
{
string Symb=Symbol();
if (Total>0) return;
OrderSend(Symb, OP_BUY, Lot, Ask, Slippage, SL, TP, NULL, Magic);
return;
}
//--------------------------------------------------------------------

void Sell()
{
if (Total==0) return;
for(int i = 0; i < OrdersTotal(); i++)
{
// already closed
if(OrderSelect(i, SELECT_BY_POS) == false) continue;
// not current symbol
if(OrderSymbol() != Symbol()) continue;
// order was opened in another way
if(OrderMagicNumber() != Magic) continue;

if(OrderType() == OP_BUY)
{
if(OrderClose(OrderTicket(), OrderLots(), Bid, Slippage))
{
i--;
}
Magic=0;
return;
}
}
}

 

Merhaba!

Bana "Sipariş bugün açılmışsa, o zaman ...." koşulunun nasıl görüneceğini söyle

 
Noterday >> :

Merhaba!

Bana "Sipariş bugün açılmışsa, o zaman ...." koşulunun nasıl görüneceğini söyle

 if ( TimeDay ( OrderOpenTime ( ) ) = = TimeDay ( Time [ 0 ] ) & & Time [ 0 ] - OrderOpenTime ( ) < 24 * 60 * 60 )
{
   //TODO
}
 
Noterday >> :

Merhaba!

Bana "Sipariş bugün açılmışsa, o zaman ...." koşulunun nasıl görüneceğini söyle

if(OrderOpenTime()>iTime(NULL,PERIOD_D1,0)), o zaman...

 
Teşekkür ederim :)