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

 

Merhaba, bu soruyla ilgileniyorum. Alpari , 24 saat çalıştığı danışmanınızı bırakabileceğiniz bir sunucu sağlıyor mu? Lütfen özelden cevap verin.

 
gheka :

bir şey çalışmıyor, belki burada bir şeyi değiştirmem veya başlangıçtan sonra koymam gerekiyor.

Kağıt üzerindeki kodunuzu anladığım bir dilde Rusça'ya çevirmeye çalıştım ama ulaşmıyor,

çok karmaşık, özellikle sonraki her bir koşulda ve sekiz koşuldan biri olduğunda

Tabii ki böyle bir kodu yaratanın sadece bir mucize olduğunu iddia etmiyorum ama bu benim için tam bir sapıklık (iyi anlamda)

standart işlev dışında, her işleme ve koşula yorum eklemek için çok tembel olmayan.


Kodda biraz fazlalık var, ancak kod oldukça okunabilir

 
programdaki periyodu değiştirme ile ilgili bir soru... örneğin farklı periyotlara uygulanması gereken belli bir operatör dizisi var.. anladığım kadarıyla bunu bir döngü şeklinde yapmak daha kolay. .. periyodu değiştirme ... belgelerde periyodun değerini döndüren bir fonksiyon buluyorum .. ama onu değiştirmek için herhangi bir fonksiyon bulamıyorum... neyi yanlış anlıyorum?
 

Bir şey seninle sürmez, ama bu kod değil ... :)

 bool isCloseLastPosByStop( string sy= "" , int op=- 1 , int mn=- 1 ) { // Объявление функции. Передаваемые параметры: sy = символ, op - тип, mn - магик
   datetime t;                                                  // Переменная содержит время закрытия ордера
   double    ocp, osl;                                           // ocp - цена закрытия позиции, osl - цена СтопЛосс закрытой позиции
   int       dg, i, j=- 1 , k=OrdersHistoryTotal();                // k содержит общее количество ордеров в истории

   if (sy== "0" ) sy= Symbol ();                                 // Если в ф-цию передан sy равный 0 или NULL, то использовать символ графика
   for (i= 0 ; i<k; i++) {                                     // Цикл по массиву закрытых ордеров
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {      // Если выбран ордер из массива закрытых ордеров, ...
       if (OrderSymbol()==sy || sy== "" ) {                    // ... если его символ совпадает с нашим, ...
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {  // ... если его тип Бай или Селл, ...
           if (op< 0 || OrderType()==op) {                // ... если тип ордера равен или -1 (имеется ввиду любой) или равен переданному в ф-цию, ...
             if (mn< 0 || OrderMagicNumber()==mn) {       // ... если его магик или любой (-1) или равен переданному в ф-цию (магику советника), ...
               if (t<OrderCloseTime()) {    // ... если переменная t содержит время закрытия меньше, чем время закрытия выбранного ордера, то ...
                t=OrderCloseTime();        // ... то присвоим переменной t время закрытия выбранного ордера (этот ордер закрыт позже предыдущего)
                j=i;                                        // Запишем в переменную j индекс найденного ордера с максимальным временем закрытия
              }
            }
          }
        }
      }
    }
  }                                                       // По окончании цикла в переменной j находится индекс последнего закрытого ордера
   if ( OrderSelect (j, SELECT_BY_POS, MODE_HISTORY)) {      // Выберем его по индексу
    dg=MarketInfo(sy, MODE_DIGITS);                       // Количество цифр после десятичного точки в цене инструмента, заданного переменной sy
     if (dg== 0 ) if ( StringFind (OrderSymbol(), "JPY" )< 0 ) dg= 4 ; else dg= 2 ; // Честно... точно не скажу, но вижу, что корректировка под йену
    ocp= NormalizeDouble (OrderClosePrice(), dg);           // Нормализуем цену закрытия ордера для дальнейшего сравнения с ценой СтопЛосс
    osl= NormalizeDouble (OrderStopLoss(), dg);             // Нормализуем цену СтопЛосс ордера для сравнения с ценой закрытия
     if (ocp==osl) return (True);                           // Если эти цены равны, значит поза закрыта по стопу, возвращаем значение "Истина"
  }
   return (False);                                          // Возвращаем "Ложь"
}

Bütün mantık bu ... Victor doğru söyledi - gereksiz, ama mümkün olduğunca basit ... :)

 
Skopcheny :
programdaki periyodu değiştirme ile ilgili bir soru... örneğin farklı periyotlara uygulanması gereken belli bir operatör dizisi var.. anladığım kadarıyla bunu bir döngü şeklinde yapmak daha kolay. .. periyodu değiştirme ... belgelerde periyodun değerini döndüren bir fonksiyon buluyorum .. ama onu değiştirmek için herhangi bir fonksiyon bulamıyorum... neyi yanlış anlıyorum?

Grafik periyodu aşağıdaki değerlerden herhangi biri olabilir:

Devamlı Anlam Tanım
PERIOD_M1 1 1 dakika
PERIOD_M5 5 5 dakika
PERIOD_M15 on beş 15 dakika
PERIOD_M30 otuz 30 dakika
PERIOD_H1 60 1 saat
PERIOD_H4 240 4 saat
PERIOD_D1 1440 1 gün
PERIOD_W1 10080 1 hafta
PERIOD_MN1 43200 1 ay
0 (sıfır) 0 Mevcut grafik dönemi
 
çok teşekkür ederim sadece bir açıklamaya ihtiyacım var... bir grup operatörün belli bir süre çalışabilmesi için önlerindeki dönemlerden birini sundukları formda belirtmeniz yeterli bu masa?
 
Skopcheny :
çok teşekkür ederim sadece bir açıklamaya ihtiyacım var... bir grup operatörün belli bir süre çalışabilmesi için önlerindeki dönemlerden birini sundukları formda belirtmeniz yeterli bu masa?
Sorunuza doğru cevap verebilmek için en azından noktayı özel olarak ayarlamanız gereken bir kod örneği görmeniz gerekiyor...
 
artmedia70 :
Sorunuza doğru cevap verebilmek için en azından noktayı özel olarak ayarlamanız gereken bir kod örneği görmeniz gerekiyor...


dizi eğilimi()
{int sayım, sayım_değişim;
çift bar merkezi;
dizi eğilimi;
bool temizle;
for (int i=10;i!=0;i--)
{
bar_centr = (Yüksek[i]-Düşük[i])/2+Düşük[i];
if (bar_centr>((Yüksek[i+1]-Düşük[i+1])/2+Düşük[i+1]))
say++;

if (bar_centr<((Yüksek[i+1]-Düşük[i+1])/2+Düşük[i+1]))
saymak--;
}

Yazdır (sayım, "dönem", Dönem() );


if (sayım>3) trend="satın al";
if (sayım<-3) trend="sat";
if (sayım<3||count>-3) trend="belirsizlik";





dönüş(eğilim);}

bu fonksiyon farklı periyotlara sırayla uygulanmalıdır ... danışmanı farklı periyotlarla terminaldeki pencerelere bağlarsanız çalışır ... soru, danışmanın kendisinin birkaç farklı periyodu işlemesinin mümkün olup olmadığıdır ...

 
Skopcheny :


bu fonksiyon farklı periyotlara sırayla uygulanmalıdır ... danışmanı farklı periyotlarla terminaldeki pencerelere bağlarsanız çalışır ... soru, danışmanın kendisinin birkaç farklı periyodu işlemesinin mümkün olup olmadığıdır ...

Anladığım kadarıyla, sadece mevcut grafik ve periyotla değil, ona geçen herhangi biriyle çalışmak için fonksiyona ihtiyacınız var ...

 string trend( string sy= "" , int tf= 0 )
{
   int count,count_change;
   double bar_centr;
   string trend;
   bool clear;

   if (sy== "" || sy== "0" ) sy= Symbol ();      
   if (tf== 0 ) tf= Period ();
   
   for ( int i= 10 ; i> 0 ; i--)
      {
         bar_centr = (iHigh(sy,tf,i)-iLow(sy,tf,i))/ 2 +iLow(sy,tf,i);
         if (bar_centr>((iHigh(sy,tf,i+ 1 )-iLow(sy,tf,i+ 1 ))/ 2 +iLow(sy,tf,i+ 1 )))
            count++;
         if (bar_centr<((iHigh(sy,tf,i+ 1 )-iLow(sy,tf,i+ 1 ))/ 2 +iLow(sy,tfi+ 1 )))
            count--;
      }

   Print (count, "период " , tf );

   if (count> 3 ) trend= "покупка" ;
   if (count<- 3 ) trend= "продажа" ;
   if (count< 3 ||count>- 3 ) trend= "неопределенность" ;

   return (trend);
}

İşlevinizi şimdi şu şekilde çağırın:

trend(Sembol(), Dönem()); // Expert Advisor'ın asılı olduğu grafik ve periyot için değerleri döndürür...

trend(USDJPY, PERIOD_D1); // USDJPY sembolü ve "1 gün" dönemi için değerleri döndürür

PERIOD_D1 yerine 1440 girebilirsiniz - aynı olacaktır ...

Parametresiz çağrılırsa, fonksiyon mevcut sembol ve nokta için değerleri döndürür (varsayılan olarak ayarlanırlar)

 
artmedia70 :

Anladığım kadarıyla, sadece mevcut grafik ve periyotla değil, ona geçen herhangi biriyle çalışmak için fonksiyona ihtiyacınız var ...

İşlevinizi şimdi şu şekilde çağırın:

trend(Sembol(), Dönem()); // Expert Advisor'ın asılı olduğu grafik ve periyot için değerleri döndürür...

trend(USDJPY, PERIOD_D1); // USDJPY sembolü ve "1 gün" dönemi için değerleri döndürür

PERIOD_D1 yerine 1440 girebilirsiniz - aynı olacaktır ...




kapsamlı cevap... çok teşekkür ederim...
Neden: