ICHIMOKU STRATEJİSİ

 

Tenkan-sen>kijun-sen (tenkan-sen çizgisi kijun-sen çizgisinin üzerindeyken) otomatik olarak 1 birim alacak ve tenkan-sen olduğunda satacak bir uzman danışman yaratmaya çalışıyorum. kijun-sen'den daha düşük.

Ben tam bir acemiyim ve dün örnekleri bir araya getirmeye çalışarak vb.

Aşağıda sonuç var ve bunun muhtemelen bir sürü saçmalık olduğunu takdir ediyorum.

Derlemeye çalışırken int start() satırlarında (navigatördeki "ticaret" komut dosyasından kopyalanan) klasik "'(' - işlev tanımı beklenmedik" ifadesini alıyorum)

Lütfen bu fikri nasıl çalıştırabileceğimi önerebilir misiniz ve şimdiden teşekkürler.


#mülkiyet telif hakkı " #telif hakkı #"
#özellik bağlantısı "#bağ#"

dış çift Lot = 0.1;
dış çift Tenkan = 9;
dış çift Kijun = 26;

//+------------------------------------------- -------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- -------------------+
int init()
{
Barlar<=Tenkan, Barlar<=Kijun;
//----
if(Barlar<=Tenkan>Barlar<=Kijun)
{
Yazdır ("Tenkan-sen Kijun-sen'den daha büyük");
dönüş(0);
}
//----
//+------------------------------------------- -------------------+
//| komut dosyası "tüm para için ticaret" |
//+------------------------------------------- -------------------+
int başlangıç()
{
//----
if(MessageBox("Gerçekten 1.00 "+Symbol()+" ASK fiyatından SATIN ALMAK istiyor musunuz? ",
"Script",MB_YESNO|MB_ICONQUESTION)!=IDYES) return(1);
//----
int bilet=OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0,"uzman yorumu",255,0,CLR_NONE);
if(bilet<1)
{
int error=GetLastError();
Print("Hata = ",ErrorDescription(hata));
dönüş;
}
//----
SiparişYazdır();
dönüş(0);
}
//+------------------------------------------- -------------------+

//+------------------------------------------- -------------------+
//| uzman sıfırlama işlevi |
//+------------------------------------------- -------------------+
int tanım()
{
Barlar<=Tenkan, Barlar<=Kijun;
//----
if(Barlar<=Tenkan<Barlar<=Kijun)
{
Yazdır ("Tenkan-sen Kijun-sen'den daha az");
dönüş(0);
}
//----
int başlangıç()
{
//----
if(MessageBox("Gerçekten 1,00 "+Symbol()+" Teklif fiyatından SATMAK istiyor musunuz? ",
"Script",MB_YESNO|MB_ICONQUESTION)!=IDYES) return(1);
//----
int bilet=OrderSend(Symbol(),OP_SELL,1.0,Bid,3,0,0,"uzman yorumu",255,0,CLR_NONE);
if(bilet<1)
{
int error=GetLastError();
Print("Hata = ",ErrorDescription(hata));
dönüş;
}
//----
SiparişYazdır();
dönüş(0);
}
//+------------------------------------------- -------------------+

 

MACD Örnek Koduna bakın.

Ichmoku Göstergesi değerlerini almak için dahili Use By MACD göstergesi için getirilen değişkenleri değiştirin.

Küçük değişiklikler yapın ve ardından sözdiziminizin doğru olup olmadığını kontrol etmek için kodu uygulayın.

edit - Ayrıca burada Ichmoku Göstergesinin nasıl kullanılacağı da kullanılır

 

Merhaba ToBa,

Üç şey;

Yalnızca 1 x başlangıç, 1 x deinit + 1 x başlangıç olmalıdır.

Başlatma işlevi , betiğinizin piyasa hareketini (veya keneleri) işleyen ana gövdesidir.

Bunun yanı sıra, her küme ayracının düzgün şekilde kapatıldığından emin olun ve her değişkeni bildirin.

 
Ickyrus :

MACD Örnek Koduna bakın.

Ichmoku Göstergesi değerlerini almak için dahili Use By MACD göstergesi için getirilen değişkenleri değiştirin.

Küçük değişiklikler yapın ve ardından sözdiziminizin doğru olup olmadığını kontrol etmek için kodu uygulayın.

edit - Ayrıca burada Ichmoku Göstergesinin nasıl kullanılacağı da kullanılır


Tamam, MACD örneğine dayanarak yeniden yaptım, ancak şu hatalarla:

'\end_of_program' - bitiş dirseği '}' bekleniyor C:\Program Files (x86)\MetaTrader 4\experts\ICHIMOKU.mq4 (80, 13)

'\end_of_program' - dengesiz sol parantez C:\Program Files (x86)\MetaTrader 4\experts\ICHIMOKU.mq4 (80, 13)


Bu yeni sürüm:

//+------------------------------------------- -------------------+
//| ICHIMOKU.mq4 |
//| Telif Hakkı © 2012, MetaQuotes Yazılım A.Ş. |
//| http://www.metaquotes.net |
//+------------------------------------------- -------------------+
#property telif hakkı "Telif hakkı © 2012, MetaQuotes Software Corp."
#özellik bağlantısı "http://www.metaquotes.net"

harici çift TakeProfit = 50;
harici çift Lot = 0.1;
harici çift TrailingStop = 30;
dış çift Tenkan = 9;
dış çift Kijun = 26;

//+------------------------------------------- -------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- -------------------+
int başlangıç()
{
çift tenkan_sen;
çift kijun_sen;
int cnt, bilet, toplam;
//----
if(Çubuklar<100)
{
Print("100'den küçük barlar");
dönüş(0);
}
if(Kâr Al<10)
{
Print("Kar Al 10'dan az");
dönüş(0); // TakeProfit'i kontrol edin
}
//----
toplam=SiparişToplam();
if(toplam<1)
{
// açık sipariş tanımlanmadı
if(AccountFreeMargin()<(1000*Lots))
{
Print("Paramız yok. Serbest Marj = ", AccountFreeMargin());
dönüş(0);
}
// uzun pozisyon (SATIN AL) olasılığını kontrol edin
if(tenkan_sen>kijun_sen)
{
bilet=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"ichimoku",16384,0,Yeşil);
if(bilet>0)
{
if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES)) Print("SATIN AL emri açıldı : ",OrderOpenPrice());
}
else Print("SATIN AL emri açılırken hata oluştu : ",GetLastError());
dönüş(0);

// pazara doğru girmek önemlidir,
// ama doğru çıkmak daha önemli...
for(cnt=0;cnt<toplam;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // açık pozisyonu kontrol edin
OrderSymbol()==Symbol()) // sembolü kontrol edin
{
if(OrderType()==OP_BUY) // uzun pozisyon açıldı
{
// kapatılmalı mı?
if((tenkan_sen<kijun_sen)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // konumu kapat
dönüş(0); // çıkış
}
// takip eden durdurmayı kontrol et
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Teklif Noktası*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
dönüş(0);
}
}
}
}
}
}
dönüş(0);
}


 

Bu noktada "sizin" kodunuz. . .

}
else Print ( "Error opening BUY order : " , GetLastError ()); 
return ( 0 ); 

                       //   <------  here  ! ! ! 

// it is important to enter the market correctly, 
// but it is more important to exit it correctly... 
for (cnt= 0 ;cnt<total;cnt++)
{

. . . burada işaretli! ! ! , Sipariş vermekten onları kapatmaya geçtiniz . . . ancak kodun satın alma kısmındaki belki 2 kapanış ( } ) parantezini kaçırıyorsunuz. . . kodunuzu makul bir şekilde girintilerseniz, bunu görmek kolaydır.

 

Tamam teşekkürler. '\end_of_program' kaldıran bu değişikliği yaptım - bitiş dirseği '}' beklenen C:\Program Files (x86)\MetaTrader 4\experts\ICHIMOKU.mq4 (80, 13)

<======= olarak işaretlendi

// uzun pozisyon (SATIN AL) olasılığını kontrol edin
if(tenkan_sen>kijun_sen)
{
bilet=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"ichimoku",16384,0,Yeşil);
if(bilet>0)
} <=======
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print(" SATIN AL emri açıldı : ",OrderOpenPrice());
}
else Print("SATIN AL emri açılırken hata oluştu : ",GetLastError());
dönüş(0);
}
// pazara doğru girmek önemlidir,

// ama doğru çıkmak daha önemli...


Yine de orada olması gerektiği gibi görünmüyor

 

Bu satırda fazladan bir açılış braketiniz var. . .

 if   ( ( tenkan_sen<kijun_sen )   // <--  surplus  (
 
Lütfen kodu göndermek için bunu kullanın. . . okumayı kolaylaştırır.

 

Bu değişkenleri başlatırsınız ancak onlara herhangi bir değer vermezsiniz. . .

 if (  tenkan_sen  > kijun_sen  )

. . . yani test her zaman yanlış olacaktır. Bu EA asla bir Sipariş vermeyecektir.

 

Girinti içeren ve derleyen bir sürümdeki kodunuz . . .

 //+------------------------------------------------------------------+
//| ICHIMOKU.mq4                                                     |
//| Copyright © 2012, MetaQuotes Software Corp.                      |
//| http://www.metaquotes.net                                        |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

extern double TakeProfit = 50 ;
extern double Lots = 0.1 ;
extern double TrailingStop = 30 ;
extern double Tenkan = 9 ;
extern double Kijun = 26 ;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int start()
   {
   double tenkan_sen;
   double kijun_sen;
   int cnt, ticket, total;
   //----
   if ( Bars < 100 )
      {
       Print ( "bars less than 100" );
       return ( 0 ); 
      }
   
   if (TakeProfit< 10 )
      {
       Print ( "TakeProfit less than 10" );
       return ( 0 ); // check TakeProfit
      }

   //----
   total= OrdersTotal ();
   if (total< 1 ) 
      {
       // no opened orders identified
       if ( AccountFreeMargin ()<( 1000 *Lots))
         {
         Print ( "We have no money. Free Margin = " , AccountFreeMargin ());
         return ( 0 ); 
         }
       // check for long position (BUY) possibility
       if (tenkan_sen>kijun_sen)
         {
         ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask, 3 , 0 ,Ask+TakeProfit* Point , "ichimoku" , 16384 , 0 , Green );
         if (ticket> 0 )
            {
             if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "BUY order opened : " , OrderOpenPrice ());
            }
         else Print ( "Error opening BUY order : " , GetLastError ()); 
         return ( 0 ); 
         
         }   //  added by RaptorUK
      }   //  added by RaptorUK
            
   // it is important to enter the market correctly, 
   // but it is more important to exit it correctly... 
   for (cnt= 0 ;cnt<total;cnt++)
      {
       OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);
       if ( OrderType ()<=OP_SELL && // check for opened position 
         OrderSymbol ()== Symbol ()) // check for symbol
         {
         if ( OrderType ()==OP_BUY) // long position is opened
            {
             // should it be closed?
             if (tenkan_sen<kijun_sen)   //  removed surplus (  RaptorUK
               {
               OrderClose ( OrderTicket (), OrderLots (),Bid, 3 , Violet ); // close position
               return ( 0 ); // exit
               }
                  
             // check for trailing stop
             if (TrailingStop> 0 ) 
               { 
               if (Bid- OrderOpenPrice ()> Point *TrailingStop)
                  {
                   if ( OrderStopLoss ()<Bid- Point *TrailingStop)
                     {
                     OrderModify ( OrderTicket (), OrderOpenPrice (),Bid- Point *TrailingStop, OrderTakeProfit (), 0 , Green );
                     return ( 0 );
                     }
                  }
               }
            }
         }
      }
   return ( 0 );
   }
 
Çok teşekkürler :)