MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 192

 
d1w4m3 :


Cevabınız için teşekkürler, ancak birkaç haftalığına kodda nasıl uygulanacağını öğrenmeye başladım veya nerede okuyacağımı söyleyin lütfen. Yoksa Igor Kim'e göre mi?

Ve yine de sisteme göre değil pozisyon açacak, işe ilk başladığında sizin durumunuz bu sorunu ortadan kaldırmıyor.

Peki ya bir düşünürsen? Neden sorunu önlemiyor?

Çalışmaya başladığında ve daha önce çalışmadıysa (genellikle ilk lansman), o zaman henüz pozisyon yoktur ve mantık, henüz son bir kapalı pozisyon olmadığını gösterecektir. Bu, durarak veya alarak kapatılamayacağı anlamına gelir, bu da bir sinyal üzerinde bir pozisyon açma izni verir.

değil mi?

 
Artyom Trishkin :

Peki ya bir düşünürsen? Neden sorunu önlemiyor?

Çalışmaya başladığında ve daha önce çalışmadıysa (genellikle ilk lansman), o zaman henüz pozisyon yoktur ve mantık, henüz son bir kapalı pozisyon olmadığını gösterecektir. Bu, durarak veya alarak kapatılamayacağı anlamına gelir, bu da bir sinyal üzerinde bir pozisyon açma izni verir.

değil mi?


Bu sadece bir sinyaldeki nokta! Ancak koşul, 2. çubukta değil (gösterge arabelleği değiştirir değiştirmez), ancak herhangi bir ikinci çubukta karşılanabilir (o zaman elbette her şey sisteme göre çalışır). Sorun sadece emirlerin açılması durumunda, nasıl bağlanacak, gösterge arabelleğini değiştirdikten sonra sadece 2. çubuğa mı?

geçersiz OnTick()

{
uptr = NormalizeDouble(iCustom(NULL, 0, "Eğim Yön Çizgisi", nokta, yöntem, fiyat, 0, n), 4);
dntr = NormalizeDouble(iCustom(NULL, 0, "Eğim Yön Çizgisi", nokta, yöntem, fiyat, 1, n), 4);
if(DN_Trend()==doğru)
{
if(CountSell() == 0 && Teklif < dntr && Aç[3] < dntr && Kapat[3] < dntr)
{
bilet = OrderSend(Symbol(), OP_SELL, Lot, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red);
eğer (bilet > 0)
{
SL = NormalizeDouble(Teklif + StopLoss*Puan, Rakamlar);
TP = NormalizeDouble(Teklif - TakeProfit*Puan, Rakamlar);
if (OrderSelect(bilet, SELECT_BY_TICKET))
if(!OrderModify(bilet, OrderOpenPrice(), SL, TP, 0))
Print("Satış hatası");
}

}


 
d1w4m3 :


Bu sadece bir sinyaldeki nokta! Ancak koşul, 2. çubukta değil (gösterge arabelleği değiştirir değiştirmez), ancak herhangi bir ikinci çubukta karşılanabilir (o zaman elbette her şey sisteme göre çalışır). Sorun sadece emirlerin açılması durumunda, nasıl bağlanacak, gösterge arabelleğini değiştirdikten sonra sadece 2. çubuğa mı?

geçersiz OnTick()

{
uptr = NormalizeDouble(iCustom(NULL, 0, "Eğim Yön Çizgisi", nokta, yöntem, fiyat, 0, n), 4);
dntr = NormalizeDouble(iCustom(NULL, 0, "Eğim Yön Çizgisi", nokta, yöntem, fiyat, 1, n), 4);
if(DN_Trend()==doğru)
{
if(CountSell() == 0 && Teklif < dntr && Aç[3] < dntr && Kapat[3] < dntr)
{
bilet = OrderSend(Symbol(), OP_SELL, Lot, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red);
eğer (bilet > 0)
{
SL = NormalizeDouble(Teklif + StopLoss*Puan, Rakamlar);
TP = NormalizeDouble(Teklif - TakeProfit*Puan, Rakamlar);
if (OrderSelect(bilet, SELECT_BY_TICKET))
if(!OrderModify(bilet, OrderOpenPrice(), SL, TP, 0))
Print("Satış hatası");
}

}


Lütfen kodu doğru yapıştırın. Yazı düzenleyici menüsünde bir SRC düğmesi var.
Açıklamanızdan hiçbir şey anlamadım.
 
d1w4m3 :


Bu sadece bir sinyaldeki nokta! Ancak koşul, 2. çubukta değil (gösterge arabelleği değiştirir değiştirmez), ancak herhangi bir ikinci çubukta karşılanabilir (o zaman elbette her şey sisteme göre çalışır). Sorun sadece emirlerin açılması durumunda, nasıl bağlanacak, gösterge arabelleğini değiştirdikten sonra sadece 2. çubuğa mı?

 void OnTick ()
{
  uptr = NormalizeDouble ( iCustom ( NULL , 0 , "Slope Direction Line" , period,  method, price, 0 , n), 4 );
  dntr = NormalizeDouble ( iCustom ( NULL , 0 , "Slope Direction Line" , period,  method, price, 1 , n), 4 ); 
  
if (DN_Trend()== true )
{
   if (CountSell() == 0 && Bid < dntr && Open [ 3 ] < dntr && Close [ 3 ] < dntr)
  { 
   ticket = OrderSend ( Symbol (), OP_SELL , Lots, Bid , Slippage, 0 , 0 , "Sloper" , Magic, 0 , Red);
       if (ticket > 0 )
      {
         SL = NormalizeDouble ( Bid + StopLoss* Point , Digits );
         TP = NormalizeDouble ( Bid - TakeProfit* Point , Digits );
         
         if ( OrderSelect (ticket, SELECT_BY_TICKET ))
         if (! OrderModify (ticket, OrderOpenPrice (), SL, TP, 0 ))
           Print ( "Ошибка на продажу" );
      }

  }


1. Kodun doğru girilmesi durumunda kod bu şekilde görünecektir. Geliştiricilerin bunu ortaya çıkarmasına şaşmamalı ...

2. İnce ipucu: Gösterge değerlerine göre Açık[4] ve Kapat[4] nerede?

 
extern int TakeProfit  = 200;
extern double Lots     = 0.1;
extern int StopLoss    = 52;
extern int Magic       = 1111;
extern int Slippage    = 3;
extern int n           = 3; // На какую свечу открывать ордер
//------------------------------------------------------------------
extern int  LevelWLoss  = 1;      // Уровень безубытка
extern int  LevelProfit = 30;     // Уровень профита
//------------------------------------------------------------------
extern string    Slope  = "Параметры Slope";
extern int       period = 163; 
extern int       method = 3;                         
extern int       price  = 0;    
//------------------------------------------------------------------
double uptr, SL, TP, dntr;
int    ticket, nd;
bool   fm;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   if (Digits == 3 || Digits == 5)
   {
       TakeProfit  *=10;
       StopLoss    *=10;
       Slippage    *=10;
       LevelWLoss  *=10;
       LevelProfit *=10;
   }
   return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
  uptr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period,  method, price, 0, n), 4);
  dntr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period,  method, price, 1, n), 4); 
  
if(DN_Trend()==true)
{
  if(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr)
  { 
   ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red);
      if (ticket > 0)
      {
         SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
         TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
         
         if (OrderSelect(ticket, SELECT_BY_TICKET))
         if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
           Print("Ошибка на продажу");
      }
  }
}//if(DN_Trend()==true)

if(UP_Trend()==true)
{
   if( CountBuy() == 0  && Ask > uptr && Open[3] > uptr && Close[3] > uptr  )
  {
   ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "Sloper", Magic, 0, Blue);
      if (ticket>0)
      {
         TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);
         SL = NormalizeDouble(Ask - StopLoss*Point, Digits);
         
         if (OrderSelect(ticket, SELECT_BY_TICKET))
            if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
               Print("Ошибка на покупку");
       }
    }
}//if(UP_Trend()==true)

      if ( CountSell()>0  && Open[3] > uptr && Close[3] > uptr && UP_Trend()==true)
      {
      for(int i = OrdersTotal() -1; i>=0; i--)
          {
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
            if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)
            if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black))
            Print("Ошибка");
            }
          }
      }
      if ( CountBuy()>0 && Open[3] < dntr && Close[3] < dntr && DN_Trend()==true)
      {
      for(int i = OrdersTotal() -1; i>=0; i--)
          {
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
            if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)
            if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black))
            Print("Ошибка");
            }
          }
      }
      //+переход в безубыток+
   for( int i=0; i<OrdersTotal(); i++) 
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
        {
        if(OrderSymbol()== Symbol() && OrderMagicNumber()==Magic)
          {
            if(OrderType()==OP_BUY) 
              {
                if(OrderStopLoss()-OrderOpenPrice()<LevelWLoss*Point) 
                 {
                   if(Bid-OrderOpenPrice()>LevelProfit*Point) 
                 {
                  fm=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+LevelWLoss*Point,OrderTakeProfit(),CLR_NONE);
                 }
              }
            }
           }
         if(OrderType()==OP_SELL) 
           {
            if(OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*Point) 
              {
               if(OrderOpenPrice()-Ask>LevelProfit*Point) 
                 {
                  fm=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-LevelWLoss*Point,OrderTakeProfit(),CLR_NONE);
                 }
              }
           }
       
        }
     }
     
//------------  комментарии -----------------+     
  if(UP_Trend()) Comment("Восходящий тренд ", uptr);
  if(DN_Trend()) Comment("Нисходящий тренд ", dntr);
 
 }
//+------------------------------------------------------------------+
int CountSell()
{
   int count = 0;
   for (int trade = OrdersTotal()-1; trade>=0; trade--)
   {
        if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))
    {
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
                    count++;   
    }
   }
     return(count);
}
//+------------------------------------------------------------------+
int CountBuy()
{
   int count = 0;
   for (int trade = OrdersTotal()-1; trade>=0; trade--)
   {
        if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))
    {
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
                    count++;   
    }
   }
     return(count);
}
//+------------------------------------------------------------------+
bool UP_Trend()
{
  if(uptr > 0 && uptr != 2147483647.0) return(true);
  return(false);
}
//+------------------------------------------------------------------+
bool DN_Trend()
{
  if(dntr > 0 && dntr != 2147483647.0) return(true);
  return(false);
}
//+------------------------------------------------------------------+
 

Koşulunuzu eklersek " Bu, ne stopla ne de alma ile kapatılamayacağı anlamına gelir, bu da bir sinyal üzerinde bir pozisyon açma izni verir. "

Ve " if (CountSell() == 0 && Bid < dntr && Open [ 3 ] < dntr && Close [ 3 ] < dntr) " sinyalim var (gösterge n=3'te bir kayma ile birlikte),

ve hemen grafiğe koyarsanız, 3. mumda başlatıldığı andan itibaren düşüş trendinde açılacak ve ardından bir sinyal belirirse, zaten olması gerektiği gibi.

 
d1w4m3 :

Koşulunuzu eklersek " Bu, ne stopla ne de alma ile kapatılamayacağı anlamına gelir, bu da bir sinyal üzerinde bir pozisyon açma izni verir. "

Ve " if (CountSell() == 0 && Bid < dntr && Open [ 3 ] < dntr && Close [ 3 ] < dntr) " sinyalim var (gösterge n=3'te bir kayma ile birlikte),

ve hemen grafiğe koyarsanız, 3. mumda başlatıldığı andan itibaren düşüş trendinde açılacak ve ardından bir sinyal belirirse, zaten olması gerektiği gibi.

Hiçbir şey anlamadım. Ne yapamıyorsun? Son pozisyonun dur veya al ile kapatıldığını belirleyemiyor musunuz? Kodunuzda bu durumu kontrol edebileceğiniz bir yer bulamıyor musunuz?

Ya da ne yapamazsınız?

Üçüncü mumda fırlatma anında nasıl açılır? Veya "üçüncü mumda fırlatıldığı andan itibaren açılacak" ne anlama geldiğini açıklar mısınız? Bu ne anlama geliyor?
 

Bazı gösterge sinyallerinde bir emir her açıldığında, bu sinyalin türünü bir değişkende nasıl saklayabilirim?

bir hata var (danışmanı başlatırken) trendin başında sipariş açılmaz (göstergenin rengini değiştirerek değil), çünkü benim durumumda belirli mumlara bağlanma yok, ancak yukarı veya aşağı trendin başlangıçta 3 mum açtığını söylüyor


 

Herkese iyi günler.

EXCEl'de iş istatistiklerini nasıl analiz edeceğimi kendime sordum.

Kim bana mt4'ten DDE ile neyin alınabileceğini söyleyebilir ve excel'e aktarım için tüm geçerli işlevleri nereden alabilirim?

yardım için minnettar olacağım

 
Maxim Shershnev :

Herkese iyi günler.

EXCEl'de iş istatistiklerini nasıl analiz edeceğimi kendime sordum.

Kim bana mt4'ten DDE ile neyin alınabileceğini söyleyebilir ve excel'e aktarım için tüm geçerli işlevleri nereden alabilirim?

yardım için minnettar olacağım

İhtiyacınız olan her şey var . Kayıt formatı .csv excell'e yazar
Файловые операции - Справочник MQL4
Файловые операции - Справочник MQL4
  • docs.mql4.com
Файловые операции - Справочник MQL4