[Arşivle!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 2. - sayfa 232

 
drknn :


Seviyenin fiyatını programlı olarak talep etmeniz gerekir. Bunu yapmak için önce çizelgeye koymalı ve (tümü programlı olarak) "Fibo" nesnesini yapılandırmalısınız. İlk bakışta göründüğü kadar basit değil. Gerçi tencereleri yakan Tanrılar değil. Ayrıca bir şekilde Fibo seviyeleriyle uğraşmak zorunda kaldım. Ve şimdi bu seviyelerin işlenmesi ile bir sipariş veriyorum. Genel olarak, isterseniz, anlayabilirsiniz.

İşte bir grafikte fibo oluşturmak için bir kod örneği.

Seviye fiyatını talep etmek için bir alt program yapmam gerekiyordu. İşte burada (ne olduğunu anlamak istiyorsanız)

Onlar. fibonacci fanına, ayrıca fibo nesnesini programlı olarak eklemeniz ve yalnızca bu şekilde seviyenin fiyatını öğrenmeniz gerekir. doğru mu anladım
 
fury2006 :
Onlar. fibonacci fanına, ayrıca fibo nesnesini programlı olarak eklemeniz ve yalnızca bu şekilde seviyenin fiyatını öğrenmeniz gerekir. doğru mu anladım
Grafiğe standart bir fibo nesnesi asmak gerekli değildir. Mevcut koşullara göre tüm fibo seviyelerini programlı olarak kolayca hesaplayabilirsiniz,
bunları değişkenlere veya bir diziye girin ve sizin tarafınızdan hesaplanan bu seviyelerle fiyatı karşılaştırın. Bu tam olarak yaptığım şey ... Yine de - her şey IMHO.
 
artmedia70 :
Grafiğe standart bir fibo nesnesi asmak gerekli değildir. Mevcut koşullara göre tüm fibo seviyelerini programlı olarak kolayca hesaplayabilirsiniz,
bunları değişkenlere veya bir diziye girin ve sizin tarafınızdan hesaplanan bu seviyelerle fiyatı karşılaştırın. Bu tam olarak yaptığım şey ... Yine de - her şey IMHO.
Lütfen örnek bir kod yazar mısınız?
 
fury2006 :
Lütfen örnek bir kod yazar mısınız?
Ve Vladimir'in size önerdiğinden daha zor olacak ... :))
 
artmedia70 :
Ve Vladimir'in size önerdiğinden daha zor olacak ... :))
Eh, belki daha çok severim :) Ve ayrıca, ek varlığı istenmeyen bir durumdur. Ekrandaki nesneler. orada çok fazla nesne olacak ve fazla olanlar sadece müdahale edecek
 
fury2006 :
Eh, belki daha çok severim :) Ve ayrıca, ek varlığı istenmeyen bir durumdur. Ekrandaki nesneler. orada çok fazla nesne olacak ve fazla olanlar sadece müdahale edecek

Kodum, yazıldığı Uzman Danışman tarafından alınan verilere sıkı sıkıya bağlıdır. İşlev, gerekli hesaplamaların yalnızca bir parçasıdır ve sizin için herhangi bir pratik değeri olmayacaktır - yalnızca kendini anlama için bir öğretim yardımı olarak. Ve sonra, tüm ön hesaplamaların yapıldığı kodun geri kalanıyla birlikte.

Evrensel yapsaydım daha yavaş çalışırdı ama doyamıyorum... :)

Ancak lütfen. İşlev, hesaplamalarını kontrol ettiğim Excel'den yeniden yazılmıştır. Ona iki parametre iletilir - ZigZag kırılması (açılmakta olan pozisyonun tipine bağlı olarak daha düşük veya daha yüksek) ve yeni bir 23,6 fib seviyesi. Fiba alışılagelmiş şekilde inşa edilmemiş ancak fiyatın 23,6 fiba seviyesini kırdığı ve önceden hesaplanan konsolidasyon seviyesinin üzerinde olduğuna inanılıyor. Fib'in sıfırı ZZ'nin kırılmasına yerleştirilir ve 23.6'da (kırıldığında) bir poz açılır. Kalan seviyeler, global seviyede bildirilen değişkenlere girilir ve ardından herhangi bir açık pozisyon için seviyelerin alındığı sipariş muhasebesi dizisine girilir.

 //=========================================================================================================
void CalcFiboLevel( double priceZZ, double price23)   // Рассчитывает уровни Фибы по нулевому и 23.6 значениям цен
{
   double A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,
          B2,B3,B4,B5,B6,B7,B8,B9,B10,B11;
   
   A2 = 0 ;                                       // Уровни фибы  
   A3 = 23.6 ;
   A4 = 38.2 ;
   A5 = 50.0 ;
   A6 = 61.8 ;
   A7 = 78.6 ;
   A8 = 100.0 ; 
   A9 = 161.8 ;  
   A10= 261.8 ; 
   A11= 423.6 ;    
   B2 = priceZZ;                                 // Цена нулевого уровня фибы (нижний/верхний перелом ЗигЗага)
   B3 = price23;                                 // Цена уровня 23.6 фибы (цена открытия позы)
   B4 = ((B3-B2) *(A4-A2) +(A3-A2) *B2)/(A3 -A2);
   B5 = ((B4-B3) *(A5-A3) +(A4-A3) *B3)/(A4 -A3);
   B6 = ((B5-B4) *(A6-A4) +(A5-A4) *B4)/(A5 -A4);
   B7 = ((B6-B5) *(A7-A5) +(A6-A5) *B5)/(A6 -A5);
   B8 = ((B7-B6) *(A8-A6) +(A7-A6) *B6)/(A7 -A6);
   B9 = ((B8-B7) *(A9-A7) +(A8-A7) *B7)/(A8 -A7);
   B10= ((B9-B8) *(A10-A8)+(A9-A8) *B8)/(A9 -A8);
   B11= ((B10-B9)*(A11-A9)+(A10-A9)*B9)/(A10-A9);
   
   
   Fibo38_Price  = B4;                         // ((B3-B2)*(A4-A2)+(A3-A2)*B2)/(A3-A2)
   Fibo50_Price  = B5;                         // ((B4-B3)*(A5-A3)+(A4-A3)*B3)/(A4-A3)
   Fibo61_Price  = B6;                         // ((B5-B4)*(A6-A4)+(A5-A4)*B4)/(A5-A4)
   Fibo78_Price  = B7;                         // ((B6-B5)*(A7-A5)+(A6-A5)*B5)/(A6-A5)
   Fibo100_Price = B8;                         // ((B7-B6)*(A8-A6)+(A7-A6)*B6)/(A7-A6)
   Fibo161_Price = B9;                         // ((B8-B7)*(A9-A7)+(A8-A7)*B7)/(A8-A7)
   Fibo261_Price = B10;                         // ((B9-B8)*(A10-A8)+(A9-A8)*B8)/(A9-A8)
   Fibo423_Price = B11;                         // ((B10-B9)*(A11-A9)+(A10-A9)*B9)/(A10-A9)

   return ;
}

Ancak kullanımı için - tüm danışmanı bağırmanız gerekir, böylece netleşir ...

 
artmedia70 :

Kodum, yazıldığı Uzman Danışman tarafından alınan verilere sıkı sıkıya bağlıdır. İşlev, gerekli hesaplamaların yalnızca bir parçasıdır ve sizin için herhangi bir pratik değeri olmayacaktır - yalnızca kendini anlama için bir öğretim yardımı olarak. Ve sonra, tüm ön hesaplamaların yapıldığı kodun geri kalanıyla birlikte.

Evrensel yapsaydım daha yavaş çalışırdı ama doyamıyorum... :)

Ancak lütfen. İşlev, hesaplamalarını kontrol ettiğim Excel'den yeniden yazılmıştır. Ona iki parametre iletilir - ZigZag kırılması (açılmakta olan pozisyonun tipine bağlı olarak daha düşük veya daha yüksek) ve yeni bir 23,6 fib seviyesi. Fiba alışılagelmiş şekilde inşa edilmemiş ancak fiyatın 23,6 fiba seviyesini kırdığı ve önceden hesaplanan konsolidasyon seviyesinin üzerinde olduğuna inanılıyor. Fib'in sıfırı ZZ'nin kırılmasına yerleştirilir ve 23.6'da (kırıldığında) bir poz açılır. Kalan seviyeler, global seviyede bildirilen değişkenlere girilir ve ardından herhangi bir açık pozisyon için seviyelerin alındığı sipariş muhasebesi dizisine girilir.

Ancak kullanımı için - tüm danışmanı bağırmanız gerekir, böylece netleşir ...

harika bir fikir verdin
 

Herkese merhaba! Lütfen aşağıdaki şeyleri birleştirmeme yardım edin. Sonuç olarak, ortaya çıkmalı: fiyatı takip eden iki satır, 20p'ye kadar Sor'un altında bir satır,

diğeri daha yüksektir ve fiyat 20p değiştiğinde sesli bir sinyal de verilir. 1 tik için.

Ayrı ayrı her şey akıllıca çalışıyor ama bir araya getiremiyorum. Şimdiden teşekkürler!

1) Hat, 20p'ye kadar Sor'un altındadır.

 //+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
ObjectCreate ( "MyPriceLine" , OBJ_HLINE , 0 , 0 , Ask- 20 * Point ) ;
ObjectSet( "MyPriceLine" , OBJPROP_PRICE1, Ask- 20 * Point );
return ( 0 );
}

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

2) Hat, 20p'ye kadar Sor'un üzerindedir.

 //+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
ObjectCreate ( "MyPriceLine" , OBJ_HLINE , 0 , 0 , Ask+ 20 * Point ) ;
ObjectSet( "MyPriceLine" , OBJPROP_PRICE1, Ask+ 20 * Point );
return ( 0 );
}

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

3) Zaman içinde fiyat değişim oranı .

 #property show_inputs

extern int pips= 2 ; //изменение аск
extern double Time_= 0.1 ; //c. ~ tick
extern bool все_из_обзора_рынка=true; // только текущий символ - false

int i, l, p, количество_символов;
string val[], на_экран;
int Ask_save[];

//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
void start(){
количество_символов=SymbolsList(val, true); //запись в массив val инструменты и их количество вызов функции SymbolsList
ArrayResize (Ask_save,количество_символов);
if (количество_символов == - 1 ){ Alert ( "Ошибка открытия файла в SymbolsList(string &Symbols[], bool Selected)" ); return ;}
if (!все_из_обзора_рынка){
количество_символов= 1 ;
ArrayResize (Ask_save,количество_символов);
ArrayResize (val,количество_символов);
val[ 0 ]= Symbol ();
}

while (true&&! IsStopped ()){ //если разрешить и не отанавливать скрипт продолжим

Alert ( "пересчитаем через " +Time_+ " сек." );

for (i= 0 ;i<количество_символов;i++){ //посчитаем стоимость спреда для инструментов из обзора рынка
if ((Ask_save[i]-MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT))>=pips){
Alert (val[i]+ "," + Period ()+ " изменился вниз на " +DoubleToStr((Ask_save[i]-MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)), 0 )+ " pips" );
PlaySound ( "timeout.wav" );
}
if ((MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)-Ask_save[i])>=pips){
Alert (val[i]+ "," + Period ()+ " изменился вверх на " +DoubleToStr((MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)-Ask_save[i]), 0 )+ " pips" );
PlaySound ( "email.wav" );
}
Ask_save[i]=MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT);
}
Sleep (Time_* 1000 ); //пауза сек.
}

/*
количество_символов=SymbolsList(val, true);//запись в массив val инструменты и их количество вызов функции SymbolsList
if(количество_символов == -1){ Alert("Ошибка открытия файла в SymbolsList(string &Symbols[], bool Selected)"); return;}

while(true&&!IsStopped()){ //если разрешить и не отанавливать скрипт продолжим
на_экран="\r\n"; //отступ
for(i=0;i<количество_символов;i++)//посчитаем стоимость спреда для инструментов из обзора рынка
на_экран=на_экран+val[i]+" стоимость спреда = " + DoubleToStr(MarketInfo(val[i],MODE_SPREAD)*MarketInfo(val[i],MODE_TICKVALUE),0)+"\r\n";
Comment(на_экран);//выведем на экран
Alert("Пересчитаем");//сигнал
Sleep(3000);//пауза 3 сек.
}
*/
}
void deinit(){ Comment ( "" );}
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=


//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
// функция читает из обзора рынка все фин.инстр.
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
int SymbolsList( string &Symbols[], bool Selected){
int Offset, SymbolsNumber; string SymbolsFileName;
if (Selected) SymbolsFileName = "symbols.sel" ; else SymbolsFileName = "symbols.raw" ;
int hFile = FileOpenHistory(SymbolsFileName, FILE_BIN | FILE_READ );
if (hFile < 0 ) return (- 1 ); if (Selected) { SymbolsNumber = ( FileSize (hFile) - 4 ) / 128 ; Offset = 116 ; }
else { SymbolsNumber = FileSize (hFile) / 1936 ; Offset = 1924 ; }
ArrayResize (Symbols, SymbolsNumber);
if (Selected) FileSeek (hFile, 4 , SEEK_SET );
for ( int i = 0 ; i < SymbolsNumber; i++){Symbols[i] = FileReadString (hFile, 12 ); FileSeek (hFile, Offset, SEEK_CUR );}
FileClose (hFile);
return (SymbolsNumber);
}
 

Lütfen bu kodun neden bazen tek bir yerde donduğunu ve devam ettirmek için terminali yeniden başlatmanız gerektiğini açıklayın.

 int ticket,err;
         Alert ( "nachalo" );
         ticket = OrderSend ( Symbol (), OP_BUY, 1 , Ask, 10 , 0 , 0 , "dsgdsf" , 0 , 0 , CLR_NONE );
         err = GetLastError ();
         Alert (err);
         Alert ( "konec" );
         OrderClose (ticket, 1 ,Bid, 5 , CLR_NONE );
         Alert ( "zakrito" );
 
globad :

Herkese merhaba! Lütfen aşağıdaki şeyleri birleştirmeme yardım edin. Sonuç olarak, ortaya çıkmalı: fiyatı takip eden iki satır, 20p'ye kadar Sor'un altında bir satır,

diğeri daha yüksektir ve fiyat 20p değiştiğinde sesli bir sinyal de verilir. 1 tik için.

Ayrı ayrı her şey akıllıca çalışıyor ama bir araya getiremiyorum. Şimdiden teşekkürler!

1) Hat 20p'ye kadar Sor'un altındadır.

2) Hat, 20p'ye kadar Sor'un üzerindedir.

3) Zaman içinde fiyat değişim oranı.


Görünüşe göre zaten yorgunum ... İlkokul, Watson:

 ObjectCreate ( "MyPriceLine" , OBJ_HLINE , 0 , 0 , Ask- 20 * Point ) ;

Bu bir satırın adıdır.

İpucu: ikinci satırın adına bakın. İlkinden farklı mı?

Ve neden sürekli olarak önceden oluşturulmuş bir nesne inşa edesiniz ?

 //+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
ObjectCreate ( "MyPriceLine" , OBJ_HLINE , 0 , 0 , Ask+ 20 * Point ) ;
ObjectSet( "MyPriceLine" , OBJPROP_PRICE1, Ask+ 20 * Point );
return ( 0 );
}

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

Şimdi aradaki farka bakın:

 //+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
if ( ObjectFind ( "MyPriceLine" )< 0 ) ObjectCreate ( "MyPriceLine" , OBJ_HLINE , 0 , 0 , Ask+ 20 * Point ) ;
ObjectSet( "MyPriceLine" , OBJPROP_PRICE1, Ask+ 20 * Point );
return ( 0 );
}

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