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

 
Vinin :


if (c % 2 == 0 ) // çift


Hiçbir şeyle eşitlik için çift kontrol etmem.
 
Lütfen bana zaten kapalı, kârsız siparişler için for döngüsünden nasıl geçeceğimi söyler misiniz? Ya da belki birinin zaten bir işlevi vardır: Kaybedilen bir işlem kapatıldığında, lotu çarparız?
 
tara :

Hiçbir şeyle eşitlik için çift kontrol etmem.


Bunu daha önce sadece tamsayılar için yazmışım gibi görünüyor. Yoksa okumakta kötü müsünüz?

Vinin 18.09.2011 03:14 edit | silmek
NickXXX :

Zor bir soru.)

Bir sayının çift mi yoksa tek mi olduğu programlı olarak nasıl belirlenir?

Örneğin:

int a, b, c;

a=2;

b=3;

c=a+b

c - çift mi tek mi?



Sayılar tamsayı ise, 2'ye böldükten sonra kalanı kontrol etmeniz gerekir.

 if (c % 2 == 0 ) //четное

 

lütfen koddaki hataları açıklayın



avatar
2
18.09.2011 11:56

Tünaydın!

Çok tembel olmayan herkese koda bakıp hatalarımı söylemesini rica ediyorum. Derleme yaparken bir sürü hata veriyor. Bu benim ilk danışmanım, daha yeni anlamaya başladım. Danışmanın fikri şudur: Pazartesi günü, belirli bir zamanda, geçen haftanın kapanışından X puanlık bir mesafede her iki yönde de bekleyen emirler veriyoruz. Cuma günü, belirtilen saatte piyasa emirlerini kapatır, bekleyenleri sileriz. Herşey.

 //+------------------------------------------------------------------+
//|                                                         Week.mq4 |
//|                                          Copyright © 2011, Qwuyt |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Qwuyt"
#property link       ""

//--- input parameters
extern double     lot= 0.01 ;                                                 //размер лота 
extern int        tp= 200 ;                                                   //тейк профит
extern int        sl= 50 ;                                                     //стоплосс
extern int        move= 100 ;                                                 //движение цены 
extern int        hc= 22 ;                                                     //час закрытия 
extern int        ho= 4 ;                                                     //час закрытия
double BP;                                                                 //цена открытия бай
double SP;                                                                 //цена открытия селл
int Ticket;                                                                
int Tip;                                                                   //тип ордера
int Curday;                                                                 //день недели
bool Ans = false;                                                           //ответ сервера после закрытия ордера
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()                               
  {
   int Curday = DayOfWeek                                    
   double BP = iClose ( NULL , 10080 , 1 )+ NormalizeDouble (move* Point , Digits );     //      
   double SP = iClose ( NULL , 10080 , 1 )- NormalizeDouble (move* Point , Digits );
     if (ho >= Hour && Curday= 1 )                                             //4 утра понедельника - открытие бай
    {
     OrderSend ( Symbol (),OP_BUYSTOP,lot,BP, 3 ,sl,tp, NULL , 0 , 0 , Red )
    }
     if (ho >= Hour && Curday= 1 )                                             //4 утра понедельника - открытие селл
    {
     OrderSend ( Symbol (),OP_SELLSTOP,lot,SP, 3 ,sl,tp, NULL , 0 , 0 , Red )
    }
     while (true)                                                           //цикл закрытия орд.
     {
       if (Tip== 0 && hc >= Hour && Curday= 6 )                               // Открыт ордер Buy, 22 часа пятницы закрыть
        {                                                                 //
         RefreshRates ();                                                   // Обновление данных
         Ans= OrderClose (Ticket,lot,Bid, 3 );                                 // Закрытие Buy
         return ;                                                           // Выход из start()
        }
       if (Tip== 1 && hc >= Hour && Curday= 6 )                               // Открыт ордер Sell, 22 часа пятницы закрыть
        {                                                                 //

         RefreshRates ();                                                   // Обновление данных
         Ans= OrderClose (Ticket,lot,Bid, 3 );
         return ;                                                           // Выход из start()
        }
       if (Tip== 4 ||Tip== 5 && hc >= Hour && Curday= 6 )                               // Открыт ордер Buy, 22 часа пятницы закрыть
        {                                                                 //
         RefreshRates ();                                                   // Обновление данных
         Ans= OrderDelete (Ticket, CLR_NONE );                                 // Закрытие Buy
         return ;                                                           // Выход из start()
        }
       break ;                                                               // Выход из while
     }
     Tip = OrderType ();
return ();
  }
Ekli dosyalar:
Hafta_1.mq4 (4,52 KB)



929
iptal 18.09.2011 12:00 edit | silmek

başlamak:

1) düzenlemek; her ifadenin sonunda

2) Hour() gibi işlevleri düzgün kullanın

 
Falmera :
Lütfen bana zaten kapalı, kârsız siparişler için for döngüsünden nasıl geçeceğimi söyler misiniz? Ya da belki birinin zaten bir işlevi vardır: Kaybedilen bir işlem kapatıldığında, lotu çarparız?

iyi söyle lütfen
 
Falmera :

iyi söyle lütfen


Bu işlevi uygulamak için kendi girişimlerinizi gösterin - "yeni başlayanlar için yardım" adlı bir şeyin bir dalı.

veya "son kapatılan siparişi ara" veya benzeri aramayı kullanın - konu uzun zamandır "deliklere emildi"

 
Falmera :

iyi söyle lütfen

Çığ dalının baykuşlarına bakın.
 

Bir programlama dili öğreniyorum ve programın anlaşılmaz bir davranışıyla karşılaştım. Ders kitabına dayanarak bir danışman yazdım , ancak onu biraz farklı bir çalışma prensibiyle değiştirdim.

2 hareketli ortalamaya dayalı Uzman Danışman. Fikir basit, hareketli ortalamalar kesişiyor, sıra kapanıyor ve tersi açılıyor. Bir danışman yazdım, iyi çalışıyor. Tabii ki küçük bir eksi, ama fikre uygun. Tüm tıkaç aşağıdaki gibidir (kalın harflerle vurgulanmıştır):

A=iMA(NULL,0,Period_MA_1,0 ,MODE_SMA, PRICE_CLOSE,1); // A

B=iMA(NULL,0,Period_MA_2,0, MODE_SMA ,PRICE_CLOSE,1); // B

C=iMA(NULL,0,Period_MA_1,0, MODE_SMA ,PRICE_CLOSE,2); // C

D=iMA(NULL,0,Period_MA_2,0, MODE_SMA ,PRICE_CLOSE,2); // D

Hareketli ortalamaları hesaplama yöntemini değiştirir değiştirmez (belki bir artı gösterilecektir) ve basit bir tane ( MODE_SMA ) yerine, üstel bir tane ( MODE_EMA ) ve başka bir tane ( MODE_SMMA ) koyun. düzleştirilmiş yöntem, her şey hemen ters gider. Çalışma prensibi komik hale gelir (strateji test cihazında), danışman belirli bir sürenin en başında bir emir açar ve sonunda kapatır. Onlar. yılda, dönemin başında tek bir işlem açar ve sonunda kapatır. Sonuç olarak danışman bana bir artı gösterdi ama benim böyle bir artıya ihtiyacım yok. Ben kendim bir yazı tura atabilir ve bir alım veya satım emri açabilir ve bir yıl içinde artı mı eksi mi olacağımı görebilirim. Bu arada, MODE_SMA yerine MODE_LWMA ( Doğrusal ağırlıklı hareketli ortalama) koyarsanız, program iyi çalışır.

Lütfen bana neyin yanlış olduğunu söyle? Sonuçta, prensip aynıdır, sadece hareketli ortalamaları hesaplamanın biraz farklı bir yolu.

Program kodunun tamamı ekteki dosyadadır.


Bana burada cevap verdiler, ancak yetkin ve konuya değil. İddiaya göre, 4 hareketli ortalama kullanıyorum. Bu doğru değildir, iki hareketli ortalama vardır, ancak her hareketli ortalama için iki çubuk için değerler alınır (toplam 4 dizi çağrısı, A, B, C, D): 1 ve 2 . Ayrıca, sözde bir siparişi kapatırken Toplam siparişlerin sayısının azaltılması gerektiğini, ancak siparişlerin Odertotal işlevi kullanılarak muhasebeleştirildiğinden ve bir siparişi kapatırsam sipariş toplamının kendisinin değerini değiştirdiğinden bunun gerekli olmadığını yazdılar. sonraki yinelemede. Ayrıca emirleri hesaba katmak için sözde sihirli sayıları kullanmayı önerdiler, henüz ders kitabında bu bölüme ulaşmadım. Tekrar ediyorum, program MODE_SMA ve MODE_LWMA ile çalışır ve MODE_EMA ve MODE_SMMA ile çalışmaz. Kim bilir nedenini bana yaz lütfen cevabı.

Dosyalar:
 
Falmera :

iyi söyle lütfen
çığ konusuna girin, herhangi bir artışla yeterli danışman var ... forumu sağ üstte veya Google'da arayın.
 
neisseria :

Bir programlama dili öğreniyorum ve programın anlaşılmaz bir davranışıyla karşılaştım. Ders kitabına dayalı bir danışman yazdım, ancak onu biraz farklı bir eylem ilkesiyle değiştirdim.

2 hareketli ortalamaya dayalı Uzman Danışman. Fikir basit, hareketli ortalamalar kesişiyor, sıra kapanıyor ve tersi açılıyor. Bir danışman yazdım, iyi çalışıyor. Tabii ki küçük bir eksi, ama fikre uygun. Tüm tıkaç aşağıdaki gibidir (kalın harflerle vurgulanmıştır):

A=iMA(NULL,0,Period_MA_1,0 ,MODE_SMA, PRICE_CLOSE,1); // A

B=iMA(NULL,0,Period_MA_2,0, MODE_SMA ,PRICE_CLOSE,1); // B

C=iMA(NULL,0,Period_MA_1,0, MODE_SMA ,PRICE_CLOSE,2); // C

D=iMA(NULL,0,Period_MA_2,0, MODE_SMA ,PRICE_CLOSE,2); // D

Hareketli ortalamaları hesaplama yöntemini değiştirir değiştirmez (belki bir artı gösterilecektir) ve basit bir tane ( MODE_SMA ) yerine, üstel bir tane ( MODE_EMA ) ve başka bir tane ( MODE_SMMA ) koyun. düzleştirilmiş yöntem, her şey hemen ters gider. Çalışma prensibi komik hale gelir (strateji test cihazında), danışman belirli bir sürenin en başında bir emir açar ve sonunda kapatır. Onlar. yılda, dönemin başında tek bir işlem açar ve sonunda kapatır. Sonuç olarak danışman bana bir artı gösterdi ama benim böyle bir artıya ihtiyacım yok. Ben kendim bir yazı tura atabilir ve bir alım veya satım emri açabilir ve bir yıl içinde artı mı eksi mi olacağımı görebilirim. Bu arada, MODE_SMA yerine MODE_LWMA ( Doğrusal ağırlıklı hareketli ortalama) koyarsanız, program iyi çalışır.

Lütfen bana neyin yanlış olduğunu söyle? Sonuçta, prensip aynıdır, sadece hareketli ortalamaları hesaplamanın biraz farklı bir yolu.

Program kodunun tamamı ekteki dosyadadır.


Bana burada cevap verdiler, ancak yetkin ve konuya değil. İddiaya göre, 4 hareketli ortalama kullanıyorum. Bu doğru değildir, iki hareketli ortalama vardır, ancak her hareketli ortalama için iki çubuk için değerler alınır (toplam 4 dizi çağrısı, A, B, C, D): 1 ve 2 . Ayrıca, sözde bir siparişi kapatırken Toplam siparişlerin sayısının azaltılması gerektiğini, ancak siparişlerin Odertotal işlevi kullanılarak muhasebeleştirildiğinden ve bir siparişi kapatırsam sipariş toplamının kendisinin değerini değiştirdiğinden bunun gerekli olmadığını yazdılar. sonraki yinelemede. Ayrıca emirleri hesaba katmak için sözde sihirli sayıları kullanmayı önerdiler, henüz ders kitabında bu bölüme ulaşmadım. Tekrar ediyorum, program MODE_SMA ve MODE_LWMA ile çalışır ve MODE_EMA ve MODE_SMMA ile çalışmaz. Kim bilir nedenini bana yaz lütfen cevabı.


Koşulları tekrar kontrol ederdim. Köpek orada gömülü olabilir.
Neden: