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

 
Michey25 >> :

burada sorun ne?

Kısacası, bu danışmanı saatlik grafiğe ekliyorum ve saatin başındaki fiyat cn1'den yüksekse ve mevcut olan 8 puan geçmiyorsa, o zaman emir açılmalıdır (fiyat aşağıdaysa da) mevcut seviye) Ve nedense benim için hemen bir pozisyon açıyor. Niye ya?

Peki 8 puan şartı nerede yazıyor? sekizi MarketInfo(NULL,MODE_POINT) ile çarpmak daha iyidir;

 
splxgf >> :

Peki 8 puan şartı nerede yazıyor? sekizi MarketInfo(NULL,MODE_POINT) ile çarpmak daha iyidir;

(a-cn1)<0.0008)

 
herkese iyi geceler. lütfen iki EA'yı birleştirmeme yardım edin. Belirli bir MAGIKE ile, PYLOSE EA, belirtilen miktara ulaşıldığında belirli bir MAGIKOM ile siparişleri kapatır ve Takip eden EA, belirtilen miktara ulaşıldığında öz sermayeyi takip eder. Trailing into PYLOSE'dan gelen kod, aynı zamanda takip etmesi için belirtilen miktara ulaşıldığında belirtilen MAGIKOM ile siparişleri kapatmadı.
Dosyalar:
archive_1.zip  10 kb
 

michey25


cevapladığımda kod biraz farklıydı;)

bazı sorular olsa da, open(0)'ın sonucu büyük ölçüde mevcut zaman dilimine bağlıdır. cn'nin nereden geldiği ve ne tür oldukları belli değil.

Din, Alert(Open[0],cn1,Open[0]<cn1,a,(a-cn1)<0.0008) yapmaya izin vermiyor mu?

Yığından önce, i=1 yerine break kullanmak daha iyidir, bu döngüden hemen çıkar ve tüm komutları sonuna kadar çalıştırmaz.

int i=0;
   double a,b;
   while (i==0)
   {
     a=MarketInfo("USDCAD", MODE_ASK);
     b=MarketInfo("USDCAD", MODE_BID); 
     if((Open[0]<cn1)&&((a-cn1)<0.0008))
      {
       OrderSend("USDCAD",OP_BUY,1,a,1,SL,cn2);
       i=1;
       }
     if((Open[0]>cn11)&&((cn11-b)<0.0008))
      {
       OrderSend("USDCAD",OP_SELL,1,b,1,SL1,cn21);
       i=1;
      }  
   }
 

Merhaba. Lütfen bunu uygulamama yardım edin. Bir Uzman Danışmanda, her biri kendi büyüsüne sahip ayrı siparişlerin açıldığı 2 bağımsız koşul çalışır. Zamanın her anında, koşulların her biri için bir çizelgede yalnızca bir sıra olabilirken, bunlar birbirleriyle aynı anda olabilir. Sipariş açma olasılığını kontrol etmek için aşağıdaki inşaatı yapıyorum

 int CalculateCurrentOrders ( string symbol )
  {
   int buys = 0 , sells = 0 , buystop = 0 , sellstop = 0 ;
//----
   for ( int i = 0 ; i < OrdersTotal ( ) ; i + + )
     {
      if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) = = false ) break ;
      if ( OrderSymbol ( ) = = Symbol ( ) & & ( OrderMagicNumber ( ) = = MAGIC1 | | OrderMagicNumber ( ) = = MAGIC2 ) )
              {
         if ( OrderType ( ) = = OP_BUY )  buys + + ;
         if ( OrderType ( ) = = OP_SELL ) sells + + ;
          if ( OrderType ( ) = = OP_BUYSTOP )  buys + + ;
         if ( OrderType ( ) = = OP_SELLSTOP ) sells + + ;
        }
     }
//----
   if ( buys > 0 ) return ( buys ) ;
   else       return ( - sells ) ;

Ama emirler sadece ikinci büyü ile açılır.

Ayrıca siparişler de birbirinden bağımsız olarak kapatılır. Aynı zamanda, ilk sihire sahip bir emir, takip etmeyi kullanır ve ikincisi kullanmaz.

Bu seçeneği uyguladım ama ya birinci koşuldan ya da ikinci koşuldan kurallara göre kapanmalar oluşmuyor ya da hiç oluşmuyor.

 

  for ( int i = 0 ; i < OrdersTotal ( ) ; i + + )
     {
      if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) ) 
      if ( OrderSymbol ( ) = = Symbol ( ) & & OrderMagicNumber ( ) = = MAGIC1 )
     if ( OrderType ( ) = = OP_BUY ) 
     if ( Sell1 = = 1 )
             {
              OrderClose ( OrderTicket ( ) , OrderLots ( ) , Bid , 3 , Red ) ;
              return ( 0 ) ;
             }
                     
      if ( OrderType ( ) = = OP_SELL ) 
      if ( Buy1 = = 1 )
             {
              OrderClose ( OrderTicket ( ) , OrderLots ( ) , Ask , 3 , Green ) ;
              return ( 0 ) ;
             }
  
      if ( OrderType ( ) = = OP_BUYSTOP & & Sell1 = = 1 )
         {
         OrderDelete ( OrderTicket ( ) ) ;
         return ( 0 ) ;
         }
      if ( OrderType ( ) = = OP_SELLSTOP & & Buy1 = = 1 )
         {
         OrderDelete ( OrderTicket ( ) ) ;
         return ( 0 ) ;
         }
    }
   
   for ( int i2 = 0 ; i2 < OrdersTotal ( ) ; i2 + + )
     {
      if ( OrderSelect ( i2 , SELECT_BY_POS , MODE_TRADES ) ) 
   
         if ( OrderSymbol ( ) = = Symbol ( ) & & OrderMagicNumber ( ) = = MAGIC2 )
     if ( OrderType ( ) = = OP_BUY )
      if ( Sellcl0 = = 1 )
       {

       OrderClose ( OrderTicket ( ) , OrderLots ( ) , Bid , 3 , Red ) ;
              return ( 0 ) ;
            }
                 
    if ( OrderType ( ) = = OP_SELL ) 
    if ( Buycl0 = = 1 )
    
            {
              OrderClose ( OrderTicket ( ) , OrderLots ( ) , Ask , 3 , Green ) ;
              return ( 0 ) ;
          
        }
     if ( OrderType ( ) = = OP_BUYSTOP ) 
     if ( Sellcl0 = = 1 )
         {
         OrderDelete ( OrderTicket ( ) ) ;
         return ( 0 ) ;
         }
      if ( OrderType ( ) = = OP_SELLSTOP & & Buycl0 = = 1 )
        {
         OrderDelete ( OrderTicket ( ) ) ;
        return ( 0 ) ;
         }
      }   
    
     // MODIFICATION -------
     
     TrailingPositionsBuy ( parab ) ;
    TrailingPositionsSell ( parab ) ;
   // TrailingPositionsBuystop(parab);
   // TrailingPositionsSellstop(parab);
    return ( 0 ) ;
   }
/*bool ExistPositions() {
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
            return(True);
         }
      } 
   } 
   return(false);
}*/
     
void TrailingPositionsBuy ( double parab ) { 
   for ( int i = 0 ; i < OrdersTotal ( ) ; i + + ) { 
      if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) ) { 
         if ( OrderSymbol ( ) = = Symbol ( ) & & OrderMagicNumber ( ) = = MAGIC1 ) { 
            if ( OrderType ( ) = = OP_BUY ) { 
             //  if (Bid-OrderOpenPrice()>trailingStop*Point) { 
              //    if (OrderStopLoss()<Bid-trailingStop*Point) 
                     ModifyStopLoss ( parab ) ;
                                   
               } 
            } 
         } 
      } 
   } 
//} 
void TrailingPositionsSell ( double parab ) { 
   for ( int i = 0 ; i < OrdersTotal ( ) ; i + + ) { 
      if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) ) { 
         if ( OrderSymbol ( ) = = Symbol ( ) & & OrderMagicNumber ( ) = = MAGIC1 ) { 
            if ( OrderType ( ) = = OP_SELL ) { 
             //  if (OrderOpenPrice()-Ask>trailingStop*Point) { 
             //     if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0)  
                     ModifyStopLoss ( parab ) ;
                  
               } 
            } 
         } 
      } 
   } 

sell1, buy1, sellcl0, buycl0 - kapanış koşullarının açıklamaları.


Böyle bir çift pozisyon sıralaması işe yarayacak mı? Sayesinde!

 
exolon >> :

Merhaba. Lütfen bunu uygulamama yardım edin. Bir Uzman Danışmanda, her biri kendi büyüsüne sahip ayrı siparişlerin açıldığı 2 bağımsız koşul çalışır. Zamanın her anında, koşulların her biri için bir çizelgede yalnızca bir sıra olabilirken, bunlar birbirleriyle aynı anda olabilir. Sipariş açma olasılığını kontrol etmek için aşağıdaki inşaatı yapıyorum

Ancak emirler sadece ikinci büyü ile açılır.

Ayrıca siparişler de birbirinden bağımsız olarak kapatılır. Aynı zamanda, ilk sihire sahip bir emir, takip etmeyi kullanır ve ikincisi kullanmaz.

Bu seçeneği uyguladım ama ya birinci koşuldan ya da ikinci koşuldan kurallara göre kapanmalar oluşmuyor ya da hiç oluşmuyor.

sell1, buy1, sellcl0, buycl0 - kapanış koşullarının açıklamaları.


Böyle bir çift pozisyon sıralaması işe yarayacak mı? Sayesinde!


siparişleri kapattıktan ve sildikten sonra, iadeyi kaldırın ve işlevin sonuna koyun veya bunun yerine bir süreklilik koyun

 

Herkese merhaba, ilk programımı mql ile yazıyorum ve aynı zamanda dil öğreniyorum.

Bilenler, söyle bana, lütfen, bir soru var.


Bir satın alma var, ardından satış koşullarını kontrol eden işlev çağrılır ve bu kadar, sonra test cihazı kilitlenir ve kod daha fazla yürütülmez. Bana neyin yanlış olduğunu söyle? Dört saat boyunca referans kitabına tırmandım, kendimi anlamıyorum.


void CheckSell()
{
while(!(NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
{
Sleep(5);
RefreshRates();
}
Sell();
}

 
Jahspear писал(а) >>

Herkese merhaba, ilk programımı mql ile yazıyorum ve aynı zamanda dil öğreniyorum.

Bilenler, söyle bana, lütfen, bir soru var.

Bir satın alma var, ardından satış koşullarını kontrol eden bir işlev çağrılır ve bu kadar, sonra test cihazı kilitlenir ve kod artık yürütülmez. Bana neyin yanlış olduğunu söyle? Dört saat boyunca referans kitabına tırmandım, kendimi anlamıyorum.

void CheckSell()
{
while(!(NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
{
Sleep(5);
RefreshRates();
}
Sell();
}

Neden bir döngü yaptın? Herhangi bir koşul yoksa, o zaman sadece çıkmanız ve sinyalin ne zaman göründüğünü kimin bildiğini beklememeniz gerekir.

 

Tünaydın.

Göstergede bir fonksiyon vardır IndicatorShortName("iC_C_mod, ..... ");

Ancak, bu yazıya ek olarak, gösterge penceresine dinamik olarak değişen bir değişkene sahip bir yorum ekleyebilmem gerekiyor.

f-ve Comment() yazın;

Ancak yalnızca, tam olarak gösterge penceresinde ve grafiğin kendisinde değil.

Lütfen. söylemek ?

 
Jahspear >> :



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


Muhtemelen bunun gibi bir şey, aksi takdirde sonsuz döngüler modern donanımda çok uzun zaman alır.
Neden: