Kodlama yardımı - sayfa 667

 
Bu ema crossover'ı EA'ya çevirmeme yardım edecek birine ihtiyacım var. mavi ok göründüğünde satın al ve kırmızı ok göründüğünde sat, okun yanındaki mum kapandığında ticaretten çık. lütfen SL VE TP'nin ayarlanabilir olmasına ve MA'lara izin verin. sadece mumu takas etmek için kullanmak istiyorum
 
dotmund :
Bu ema crossover'ı bir EA'ya dönüştürmeme yardım edecek birine ihtiyacım var. mavi ok göründüğünde satın al ve kırmızı ok göründüğünde sat, okun yanındaki mum kapandığında ticaretten çık. lütfen SL VE TP'nin ayarlanabilir olmasına ve MA'lara izin verin. sadece mumu takas etmek için kullanmak istiyorum
Bu gönderiyi kontrol edin: https://www.mql5.com/en/forum/180648/page940
 
mladen :

Mum zamanı için, bunun için özelleşmiş bazı göstergeleri kullanmak en iyisidir (ekli gibi)

Nokta ayırıcıya gelince: zaten nmc ama ekli olanı kullanmak isteyebilirsiniz (işlemcide daha hafif olmalıdır)

Çok teşekkürler. " BarsLimit " seçeneğini eklemeye çalışıyorum ama başarılı olamadım . Bana yardım edebilir misiniz, lütfen. Zaman ayırdığınız için çok teşekkürler.
Dosyalar:
 
Entropy :
Çok teşekkürler. " BarsLimit " seçeneğini eklemeye çalışıyorum ama başarılı olamadım . Bana yardım edebilir misiniz, lütfen. Zaman ayırdığınız için çok teşekkürler.

Entropi

İşte bu seçeneğin eklendiği bir sürüm

Dosyalar:
 

Merhaba mladen bana beyannameyi çözmeyi öğretir misin ?

Bu uyarıyı alıyorum.

declaration of 'MinLots' hides global declaration at line 93    
declaration of 'MaxLots' hides global declaration at line 94    
declaration of 'Magic' hides global declaration at line 118     
void CalculateMM()
{
   double MinLots= MarketInfo ( Symbol (), MODE_MINLOT );
   double MaxLots= MarketInfo ( Symbol (), MODE_MAXLOT );
   Lots= AccountFreeMargin ()/ 100000 *RiskPercent;
   Lots= MathMin (MaxLots, MathMax (MinLots,Lots));
   if (MinLots< 0.1 )Lots= NormalizeDouble (Lots, 2 );
   else
   {
     if (MinLots< 1 )Lots= NormalizeDouble (Lots, 1 );
     else Lots= NormalizeDouble (Lots, 0 );
   }
   if (Lots<MinLots)Lots=MinLots;
   if (Lots>MaxLots)Lots=MaxLots;
   return ;



int CloseBuyOrders( int Magic)
{
   int total= OrdersTotal ();

   for ( int cnt=total- 1 ;cnt>= 0 ;cnt--)
  {
     if ( OrderSelect (cnt, SELECT_BY_POS , MODE_TRADES )) 
     if ( OrderMagicNumber ()==Magic&& OrderSymbol ()== Symbol ())
    {
       if ( OrderType ()== OP_BUY )
      {
       ClTicket= OrderClose ( OrderTicket (), OrderLots (), Bid , 3 );
      }
    }
  }
   return ( 0 );
}

int CloseBuyOrdersHiddenTP( int Magic)
{
   int total= OrdersTotal ();

   for ( int cnt=total- 1 ;cnt>= 0 ;cnt--)
  {
     if ( OrderSelect (cnt, SELECT_BY_POS , MODE_TRADES )) 
     if ( OrderMagicNumber ()==Magic&& OrderSymbol ()== Symbol ())
    {
       if ( OrderType ()== OP_BUY && Bid >( OrderOpenPrice ()+TakeProfit* Point ))
      {
        ClTicket= OrderClose ( OrderTicket (), OrderLots (), Bid , 3 );
      }
    }
  }
   return ( 0 );
}

Teşekkür ederim .

 
stevenpun :

Merhaba mladen bana beyannameyi çözmeyi öğretir misin ?

Bu uyarıyı alıyorum.



Teşekkür ederim .

İlk önce bu:

 void CalculateMM()
{
   double tMinLots= MarketInfo ( Symbol (), MODE_MINLOT );
   double tMaxLots= MarketInfo ( Symbol (), MODE_MAXLOT );
   Lots= AccountFreeMargin ()/ 100000 *RiskPercent;
   Lots= MathMin (tMaxLots, MathMax (tMinLots,Lots));
   if (tMinLots< 0.1 )Lots= NormalizeDouble (Lots, 2 );
   else
   {
     if (tMinLots< 1 )Lots= NormalizeDouble (Lots, 1 );
     else Lots= NormalizeDouble (Lots, 0 );
   }
   if (Lots<tMinLots)Lots=tMinLots;
   if (Lots>tMaxLots)Lots=tMaxLots;
   return ;

ve bu

 int CloseBuyOrders( int tMagic)
{
   int total= OrdersTotal ();

   for ( int cnt=total- 1 ;cnt>= 0 ;cnt--)
  {
     if ( OrderSelect (cnt, SELECT_BY_POS , MODE_TRADES )) 
     if ( OrderMagicNumber ()==tMagic&& OrderSymbol ()== Symbol ())
    {
       if ( OrderType ()== OP_BUY )
      {
       ClTicket= OrderClose ( OrderTicket (), OrderLots (), Bid , 3 );
      }
    }
  }
   return ( 0 );
}

int CloseBuyOrdersHiddenTP( int tMagic)
{
   int total= OrdersTotal ();

   for ( int cnt=total- 1 ;cnt>= 0 ;cnt--)
  {
     if ( OrderSelect (cnt, SELECT_BY_POS , MODE_TRADES )) 
     if ( OrderMagicNumber ()==tMagic&& OrderSymbol ()== Symbol ())
    {
       if ( OrderType ()== OP_BUY && Bid >( OrderOpenPrice ()+TakeProfit* Point ))
      {
        ClTicket= OrderClose ( OrderTicket (), OrderLots (), Bid , 3 );
      }
    }
  }
   return ( 0 );
}
 

Merhaba Mladen,

Neyin düzeltilmesi gerektiği konusunda bana bu kodu verir misiniz efendim?

Ayrıca, daha yüksek bir zaman dilimine gittiğinde, değiştirmek mümkün mü?

===> 1Dk ~ 30 Min ==> her 10 pipte

===> 1 Saat ======> her 50 pipte

===> 4 Saat, Günlük ======> her 100 pipte

===> Haftalık, Aylık ===> her 1000 pipte

Çizgiler yerine dikdörtgenler istenir efendim.

#özellik göstergesi_chart_window

#define ONDA_BEGINS 0

#define ONDA_CONTAINS 1



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

//| Özel gösterge başlatma işlevi |

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

int init()

{

//---- göstergeler


//----

dönüş(0);

}

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

//| Özel gösterge sıfırlama işlevi |

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

int tanım()

{

//----

for (int ix = 0; ix < nLines; ix++) // yatay satırlarımı sil

{

ObjectDelete("tensLines"+ix);

}


//----

dönüş(0);

}

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

//| Özel gösterge yineleme işlevi |

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

int başlangıç()

{

int nLines = 40; // Çekilecek toplam çizgi sayısı

çift satırAralık = 0.0010; // satırlar arasındaki aralık

double normPrice = NormalizeDouble(Close[1],3); // Güncel fiyat en yakın "10"a yuvarlanır


for (int ix = 0; ix < nLines; ix++) // Döngü yayılma sayısı

{

if(ObjectFind("tensLines"+ix) < 0)

ObjectCreate("tensLines"+ix, OBJ_HLINE, 0, 0, normPrice+((ix-(nLines/2))*lineInterval)); // Mevcut fiyatın yarısını, yarısının altına yerleştir


else ObjectSet("tensLines"+ix, OBJPROP_PRICE1, normPrice+((ix-(nLines/2))*lineInterval));

ObjectSet("tensLines"+ix,OBJPROP_COLOR,DarkSlateGray); // Çizgilerin daha iyi görünmesini sağlayın

}

//----

dönüş(0);

}

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


void ObjectNameDeleteAll(dize adı, int nerede=ONDA_BEGINS, int türü=BOŞ)

{

for(int iObj=ObjectsTotal()-1; iObj >= 0; iObj--)

{

string on = ObjectName(iObj);

int iPos = StringFind(açık, isim);

(iPos < 0) devam ederse;

(iPos > 0 && burada == ONDA_BEGINS) devam ederse;

if (type == EMPTY) ObjectDelete(on);

else if (type == ObjectType(on)) ObjectDelete(on);

}

}




//---

 
murnathan32 :

Merhaba Mladen,

Neyin düzeltilmesi gerektiği konusunda bana bu kodu verir misiniz efendim?

Ayrıca, daha yüksek bir zaman dilimine gittiğinde, değiştirmek mümkün mü?

===> 1Dk ~ 30 Min ==> her 10 pipte

===> 1 Saat ======> her 50 pipte

===> 4 Saat, Günlük ======> her 100 pipte

===> Haftalık, Aylık ===> her 1000 pipte

Çizgiler yerine dikdörtgenler istenir efendim.

#özellik göstergesi_chart_window

#define ONDA_BEGINS 0

#define ONDA_CONTAINS 1



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

//| Özel gösterge başlatma işlevi |

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

int init()

{

//---- göstergeler


//----

dönüş(0);

}

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

//| Özel gösterge sıfırlama işlevi |

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

int tanım()

{

//----

for (int ix = 0; ix < nLines; ix++) // yatay satırlarımı sil

{

ObjectDelete("tensLines"+ix);

}


//----

dönüş(0);

}

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

//| Özel gösterge yineleme işlevi |

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

int başlangıç()

{

int nLines = 40; // Çekilecek toplam çizgi sayısı

çift satırAralık = 0.0010; // satırlar arasındaki aralık

double normPrice = NormalizeDouble(Close[1],3); // Güncel fiyat en yakın "10"a yuvarlanır


for (int ix = 0; ix < nLines; ix++) // Döngü yayılma sayısı

{

if(ObjectFind("tensLines"+ix) < 0)

ObjectCreate("tensLines"+ix, OBJ_HLINE, 0, 0, normPrice+((ix-(nLines/2))*lineInterval)); // Mevcut fiyatın yarısını, yarısının altına yerleştir


else ObjectSet("tensLines"+ix, OBJPROP_PRICE1, normPrice+((ix-(nLines/2))*lineInterval));

ObjectSet("tensLines"+ix,OBJPROP_COLOR,DarkSlateGray); // Çizgilerin daha iyi görünmesini sağlayın

}

//----

dönüş(0);

}

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


void ObjectNameDeleteAll(dize adı, int nerede=ONDA_BEGINS, int türü=BOŞ)

{

for(int iObj=ObjectsTotal()-1; iObj >= 0; iObj--)

{

string on = ObjectName(iObj);

int iPos = StringFind(açık, isim);

(iPos < 0) devam ederse;

(iPos > 0 && burada == ONDA_BEGINS) devam ederse;

if (type == EMPTY) ObjectDelete(on);

else if (type == ObjectType(on)) ObjectDelete(on);

}

}




//---

böyle dene

 #property indicator_chart_window

#define ONDA_BEGINS   0

#define ONDA_CONTAINS 1


     int nLines = 40 ;                                   // Number of total line to draw

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

//| Custom indicator initialization function                         |

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

int init()

  {

//---- indicators


//----

   return ( 0 );

  }

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

//| Custom indicator deinitialization function                       |

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

int deinit()

  {

//----

     for ( int ix = 0 ; ix < nLines; ix++) // delete my horizontal lines

      {

       ObjectDelete ( "tensLines" +ix);

      }


//----

   return ( 0 );

  }

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

//| Custom indicator iteration function                              |

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

int start()

  {


   double lineInterval = 0.0010 ;                       // Interval between lines

   double normPrice = NormalizeDouble ( Close [ 1 ], 3 );     // Current price is rounded to nearest "10"


   for ( int ix = 0 ; ix < nLines; ix++)                 // Loop span number of times

      {

       if ( ObjectFind ( "tensLines" +ix) < 0 ) 

         ObjectCreate ( "tensLines" +ix, OBJ_HLINE , 0 , 0 , normPrice+((ix-(nLines/ 2 ))*lineInterval));     // Place half above and half below the current price


       else ObjectSet ( "tensLines" +ix, OBJPROP_PRICE1 , normPrice+((ix-(nLines/ 2 ))*lineInterval));

       ObjectSet ( "tensLines" +ix, OBJPROP_COLOR ,DarkSlateGray);       // Make the lines look better

      }

 

//----

   return ( 0 );

  }

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


void ObjectNameDeleteAll( string name, int where=ONDA_BEGINS, int type= EMPTY )

{

     for ( int iObj= ObjectsTotal ()- 1 ; iObj >= 0 ; iObj--)

    {

         string on   = ObjectName (iObj);

         int     iPos = StringFind (on, name);

         if (iPos < 0 )                         continue ;

         if (iPos > 0 && where == ONDA_BEGINS) continue ;

         if       (type == EMPTY )         ObjectDelete (on);

         else if (type == ObjectType (on)) ObjectDelete (on);

    }

}



 
hey millet, benim için python'da bir kod yazacak birini kiralamak isteyen, birinin işi için ödeme yapmaya istekli veya biri bunu ücretsiz yaparsa, bu çok havalı lol. ama ne zaman olursa olsun bana geri dönün ve bana yardım edebilecek biri varsa bana bildirin, birinin dikkatini çektikten sonra daha fazla ayrıntıya gireceğim. Bollinger bantlarında , esas olarak birkaç başka göstergeyle olacak. tüm yardımlarınız için teşekkürler çocuklar!
 
mladen :

böyle dene

Vay. Adamsın. Nimetler için teşekkürler mladen.

Bir istek daha. Aşağıdaki ek/resim gibi ızgarayı dikdörtgenler haline getirebilir misiniz? Örneğin dikdörtgen başına 10 pip. Dikdörtgenin geleceği yansıtmasına izin verin.

Gözlerde varsayılan ızgaradan daha kolay olduğunu hissediyorum. Ve kaç pip hareketine baktığınızı görmek yarım saniye sürer.

     ObjectCreate ( "Rect02" , OBJ_RECTANGLE , 0 , Time[0] , Bid, Time[ Bars ], (Bid+ 0.0010 ) ); //make bar above cur price
      ObjectSet( "Rect02" , OBJPROP_COLOR , Silver );
      }
//================= Move the Rect with new ticks/candles ===========================
   
   else {
       ObjectMove ( "Rect01" , 0 , Time[ 0 ], WindowPriceMin()* 0.95 );
       ObjectMove ( "Rect02" , 0 , Time[ 0 ], Bid); 

}

Dosyalar: