[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 618

 
xant :

rigonik

Bir tür şaka mısın yoksa ne? Nerede gülmeli?

TarasBY

Yapamazsın? Eh, almazlardı.

Sana Rusça yazdım - ders kitabında küresel değişkenleri bildirmekle ilgili neredeyse hiçbir şey yok. Örneğin, fGet_MineGV(); nedir bilmiyorum.

Bu bir fonksiyon mu? Evet ise, ne yapıyor? Öğreticide, fGet araması boş sonuç döndürür.

int init() içinde ne beyan etmeliyim? Sen yazdın:

{
fGet_MineGV();
}


Uzman Danışmanımda, Init'in başlatılması şöyle görünüyor:

int init()
{
ArrayInitialize(buf3,0);
ArrayInitialize(b1,0);
ArrayInitialize(b2,0);
ArrayInitialize(b3,0);
ArrayInitialize(b4,0);


Comment("Ortalama değer hesaplaması"+ind);
m1=NormalizeDouble(iCustom(NULL,tf,ind+"_a",0,0),2);
string d="Ortalama "+ind+" "+DoubleToStr(m1,2);
tm=ZamanAkım();
int q=0,bilet=-1;
çift işlem=0,lot1=0;
for(q=0;q<OrdersTotal();q++)
{

ve benzeri, 100 satır daha. Nerede, özellikle hangi yerde ve en önemlisi burada tam olarak neyi ilan etmeliyim? Rusça yazmak gerçekten zor mu? Parmaklarımızı bükelim, evet.

Bu bir fonksiyon mu? Evet ise, ne yapıyor? Öğreticide, fGet araması boş sonuç döndürür.

Evet, işlev bu ve ders kitabında bununla ilgili hiçbir şey olamaz, ders kitabı yazıldığında hiç yoktu. Bu, özellikle sizin için yazılmış özel bir işlevdir.

       void  fGet_MineGV ( string  fs_PrefName =  ""  // префикс имени переменной
       { 
         string ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_1" );
         if ( GlobalVariableCheck (ls_Name)) SUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_2" );
         if ( GlobalVariableCheck (ls_Name)) SUA1 = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_3" );
         if ( GlobalVariableCheck (ls_Name)) BUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_4" );
         if ( GlobalVariableCheck (ls_Name)) BUA1 = GlobalVariableGet (ls_Name);
         //----
    }
 
İyi akşamlar! Takip eden durdurma, sipariş verdikten hemen sonra hemen çalışır. Ve sadece biletli bir sipariş tarihe geçtiğinde çalışmalı ve kesinlikle kâr elde etmeye göre gidiyor.


//***************************************   
 
  nahodka= false ;
 
 
 if ( OrderSelect (tocket, SELECT_BY_TICKET , MODE_HISTORY))  
 if (OrderTakeProfit( )- 3 * Point <profitsell&&OrderTakeProfit( )+ 3 * Point >profitsell) nahodka= true ;
     // Находим ордер, сработавший именно по тейкпрофиту 
 
 
  
 if (nahodka){ if ( OrderSelect (tecket,SELECT_BY_TICKET)){
 if (OrderStopLoss( )>Bid+treylingstop* Point ){ Print ( "четвёртаямодифи    " );
 OrderModify(  tecket, OrderOpenPrice(), Bid+treylingstop* Point , OrderTakeProfit(), 0 , CLR_NONE );}}}
   // Модифицируем оставшийся ордер
 for ( i = OrdersTotal () - 1 ; i >= 0 ; i--)
 

rigonik

Bunu en başında yaptım. init işlevinin içine bu kod parçasını ekledim, derledim ve bir not aldım:

" fGet_MineGV " işlevine atıfta bulunulmuyor ve exp dosyasından kaldırılacak

Bu sözü anlıyorum, çünkü henüz bir kayıt yok, hiçbir şey sayamıyor, değil mi?

Ondan sonra zaten start fonksiyonunun içine kodun ikinci kısmını yazıyorum. Bu parça şuna benziyor:

void fSave_MineGV (string fs_PrefName = "") // değişken adı öneki
{
statik tarihsaat ldt_NewBar;
tarihsaat ldaTBeginBar = iTime(Symbol(), 1, 0)
//---- Her dakikanın başında kaydet
if (ldt_NewBar == ldaTBeginBar) dönüşü;
ldt_NewBar = ldaTBeginBar;
//---- Her değişkenin değerlerini sırayla kaydedin
string ls_Name = StringConcatenate(fs_PrefName, Symbol(), "_N_1");
GlobalVariableSet(ls_Name, SUA);
ls_Name = StringConcatenate(fs_PrefName, Symbol(), "_N_2");
GlobalVariableSet(ls_Name, SUA1);
ls_Name = StringConcatenate(fs_PrefName, Symbol(), "_N_3");
GlobalVariableSet(ls_Name, BUA);
ls_Name = StringConcatenate(fs_PrefName, Symbol(), "_N_4");
GlobalVariableSet(ls_Name, BUA1);
}

Her şey burada mı?

Kodun bu kısmını SUA, SUA1, BUA,BUA1 hesaplamasının hemen ardından ekliyorum.

Ancak derlendiğinde danışman şunları verir:

27 hata(lar), 64 uyarı(lar)

 

xant :

rigonik

Bunu en başında yaptım. init işlevinin içine bu kod parçasını ekledim, derledim ve bir not aldım:

"fGet_MineGV" işlevine atıfta bulunulmuyor ve exp dosyasından kaldırılacak

Bu sözü anlıyorum, çünkü henüz bir kayıt yok, hiçbir şey sayamıyor, değil mi?

Ondan sonra zaten start fonksiyonunun içine kodun ikinci kısmını yazıyorum. Bu parça şuna benziyor:

void fSave_MineGV (string fs_PrefName = "") // değişken adı öneki
{
statik tarihsaat ldt_NewBar;
tarihsaat ldaTBeginBar = iTime(Symbol(), 1, 0)
//---- Her dakikanın başında kaydet
if (ldt_NewBar == ldaTBeginBar) dönüşü;
ldt_NewBar = ldaTBeginBar;
//---- Her değişkenin değerlerini sırayla kaydedin
string ls_Name = StringConcatenate(fs_PrefName, Symbol(), "_N_1");
GlobalVariableSet(ls_Name, SUA);
ls_Name = StringConcatenate(fs_PrefName, Symbol(), "_N_2");
GlobalVariableSet(ls_Name, SUA1);
ls_Name = StringConcatenate(fs_PrefName, Symbol(), "_N_3");
GlobalVariableSet(ls_Name, BUA);
ls_Name = StringConcatenate(fs_PrefName, Symbol(), "_N_4");
GlobalVariableSet(ls_Name, BUA1);
}

Her şey burada mı?


Fonksiyon tanımları start, init veya diğer fonksiyonlara eklenmez. ayrı olarak yerleştirilmelidirler. En azından Uzman Danışmanınızın başına, sonuna, en azından ortasına yerleştirebilirsiniz, ancak diğer işlevlerin içine yerleştiremezsiniz. init'te, yalnızca bir işlev çağrısı eklemeniz gerekir, en baştan yapabilirsiniz.

Bu sözü anlıyorum, çünkü henüz bir kayıt yok, hiçbir şey sayamıyor, değil mi? Bu doğru, derleyicinin nerede olması gerektiğini - diğer işlevlerin dışında - aradığına dair bir işlev bildirimi yok.

{

fGet_MineGV();
}

Aynısı ikinci fonksiyon için de geçerlidir. Bu bir başlangıç ve programlama yapan herhangi birinin, hatta yeni başlayan birinin bile bunu bilmeyebileceğini hayal etmek zor.

 
Dimka-novitsek :
İyi akşamlar! Takip eden durdurma, sipariş verdikten hemen sonra hemen çalışır. Ve sadece biletli bir sipariş tarihe geçtiğinde çalışmalı ve kesinlikle kar al mantığına göre hareket ediyor.

Ama sonuçta, geçmişiniz boş değilse, neredeyse kesinlikle tam olarak kâr elde etmeye çalışan bir sipariş bulacaksınız? Görünüşe göre, tp tarafından kapatılan bir sipariş için geçmişe bakmıyorsunuz, ancak ihtiyacınız olan siparişin nasıl kapatıldığını ve kapatılıp kapatılmadığını görmek için geçmişi kontrol ediyorsunuz. Bunu kontrol edin, neden emrinizin kapanış fiyatının tam olarak ne olduğunu kontrol ediyorsunuz? Üç seçenek -- 1. kapanış fiyatı==0 -- eğer piyasa geçmişte değilse emir (OrderSelect() false döndürür) 2. kapanış fiyatı eşittir
Sipariş AlKar ( )
-- sipariş tp tarafından kapatıldı, 3. kapanış fiyatı eşit değil
Sipariş AlKar ()
-- sipariş tp'ye göre kapatılmadı .
 

rigonik

Yine yirmi beş. Çok özel olarak sordum - ilk adımı doğru attım mı? Direkt bir soruya cevap vermediniz, konuya dair tek kelime etmediniz.

Evet tabi ki ders kitabını okuyorum ama mesleğimin programlama ile ilgisi olmadığı için net, basit, spesifik bir algoritma istediğim açık. Peki, anlamak zor mu? Eğer esaslara cevap vermek senin için zorsa, neden zahmet ediyorsun? Sadece geç.

Ve bir yorum olarak - bir pratisyen olarak aptal diyebileceğim kaç kişiyle tanıştığımı bilmiyorsun. Yetişkinlerin kendi sağlıklarıyla ilgili temel sorunları anlamadıklarını hayal etmek zor. Herkese senin tepki verdiğin gibi tepki verirsem, o zaman bir uzman olarak değersiz olacağım. İyi uykular.

_______________

Lütfen - danışmanın kodunu aptalca alabilen ve ihtiyacınız olanı doğru yere ekleyebilen biri bana soap neroy(dog)mail.ru'dan yazsın.

 
xant :

rigonik

Yine yirmi beş. Çok özel olarak sordum - ilk adımı doğru attım mı? Doğrudan bir soruya cevap vermedin, konuya tek kelime etmedin.

Evet tabi ki ders kitabını okuyorum ama mesleğimin programlama ile ilgisi olmadığı için net, basit, spesifik bir algoritma istediğim açık. Peki, anlamak zor mu? Eğer esaslara cevap vermek senin için zorsa, neden zahmet ediyorsun? Sadece geç.

Ve bir yorum olarak - bir pratisyen olarak aptal diyebileceğim kaç kişiyle tanıştığımı bilmiyorsun. Yetişkinlerin kendi sağlıklarıyla ilgili temel sorunları anlamadıklarını hayal etmek zor. Herkese senin tepki verdiğin gibi tepki verirsem, o zaman bir uzman olarak değersiz olacağım. İyi uykular.

_______________

Lütfen - danışmanın kodunu aptalca alabilen ve ihtiyacınız olanı doğru yere ekleyebilen biri bana soap neroy(dog)mail.ru'dan yazsın.


Danışmanınızı alıp içine gerekli kodu eklemenizi istemediniz, danışmanın kodunu göndermediniz, ilk başta danışmanı kapatırken veri kaybı sorununun çözümü için yardım istediniz, bunu yaptığınızda, sana yardım edene hakaret ettin, sonra haklı olup olmadığını sordun "ilk adımı" attın ve sana neyin yanlış olduğunu söyleyip belirli hatalara dikkat çektiklerinde yine sana yardım edenlere hakaret ettin, bu yüzden bence pek mümkün değil başka birinin bunu yapmak isteyeceğini.

PS Ve algoritma, iki hazır işlevi alıp danışmanınıza kopyalamaktan ve başlatmanın başında ve diğerini başlatmanın sonunda arama yapmaktan daha basit ve net, düşünmek bile zor ile ilgili.

 
rigonich :

genel olarak, bu, başka bir kişi tarafından kısmen düzeltilmiş kodunuzdur.


kodum herhangi bir hata vermedi . Ama bir sonuç da vermedi.

Ve kodu bile çalışmadı, çünkü 24 hata ....

ama bir fikrim var... ve şimdi her şey çalışıyor.

 

derleyici kesinlikle insanlık dışı. Şimdi beynim neredeyse neden bir hata gösterildiğini kırdı

'(' - işlev tanımı beklenmeyen G:\Program_Files_2\MT4-demo\experts\3.mq4 (139, 14)

Bu Uzman Danışmanın dün bir patlama ile çalıştığı bir zamanda ve bugün uzun bir IF'yi birkaç kısa if'ye açtım....

Derleyicinin hata gösterdiği yerden bir KİLOMETRE ile ilgili tırnak işaretini kaçırdığı ortaya çıktı!Ayrıca, tırnak işareti konusunda sessiz kaldı, görüyorsunuz, FONKSİYON ona uymadı ....:(( ((((((

 

rigonik

Her kelimenize nokta nokta cevap verebilirdim, ama artık amacı göremiyorum. Biri dinlenirse, ona hiçbir şey açıklanamaz. İlk soru nasıl organize edileceğiydi. Ardından, global değişkenlerin bir dosyaya yazmaktan daha iyi olduğu ipucunu verdiğinizde, bunların nasıl doğru bir şekilde yapılacağı sorusu ortaya çıktı. Sonra gergin oda arkadaşınız alaycı olma fırsatını kaçırmadan bir kod parçası verdi. Çok basit - kodun bir kısmı başlatma bloğuna gider, bloğun bir kısmı EA'nın ana bloğuna gider.

İşte başlatma bloğuna girenler:

 void fGet_MineGV ( string fs_PrefName = "" ) // префикс имени переменной
     {
         string ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_1" );
         if ( GlobalVariableCheck (ls_Name)) SUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_2" );
         if ( GlobalVariableCheck (ls_Name)) SUA1 = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_3" );
         if ( GlobalVariableCheck (ls_Name)) BUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_4" );
         if ( GlobalVariableCheck (ls_Name)) BUA1 = GlobalVariableGet (ls_Name);
     }

İşte ana bloğa neler giriyor

 void fSave_MineGV ( string fs_PrefName = "" ) // префикс имени переменной
{
 static datetime ldt_NewBar;
 datetime ldaTBeginBar = iTime ( Symbol (), 1 , 0 )
 //---- Сохраняемся в начале каждой минуты
 if (ldt_NewBar == ldaTBeginBar) return ;
 ldt_NewBar = ldaTBeginBar;
 //---- Сохраняем поочереди значения каждой переменной
 string ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_1" );
 GlobalVariableSet (ls_Name, SUA);
 ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_2" );
 GlobalVariableSet (ls_Name, SUA1);
 ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_3" );
 GlobalVariableSet (ls_Name, BUA);
 ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_4" );
   GlobalVariableSet (ls_Name, BUA1);
}

Gördüğünüz gibi değişkenleri yeniden adlandırdım.

Bu yüzden, değişkenlerin hesaplanmasından hemen sonra başlayarak ve başlangıç bloğunun sonuna geçerek, onu son küme ayracından önce ekleme girişimi ile biten kodun ikinci bölümünü sırayla ekledim.

Son derece profesyonel açıklamanıza dayanarak, tam olarak yapmam gereken şey buydu, çünkü yeni başlayanlar için açık. Size göre, her şey işe yaramalı. Ama çalışmıyor. İşte elde edebildiğim en iyi şey:

 8 error(s), 0 warning(s)