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

 
TarasBY :

Şu şekilde derlenebilir:

kodun yapısı bir şekilde "sol" olsa da ...


Peki.. Yazdım. İlk kepçeyi söyleyin. :)
 

Biraz uzman olarak yeniden yazdım. İşte olanlar:

 //+------------------------------------------------------------------+
//|                                                       2 Days.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link       ""

extern string     A1 = "Объем сделки. Если i_lots = 0, то считается в процентах" ;
extern double     i_lots = 0.1 ;
extern string     A2 = "Управление рисками" ;
extern double     i_sl = 15 ,
                 i_tp = 10 ;
extern int   slippage,
            price_b,
            price_a;

extern string     Z1 = "=== Прочие настройки ===" ;
extern string     i_openOrderSound = "ok.wav" ;
extern int        i_magicNumber = 400021 ;

double firstBarClosed,
       secondBarClosed;
 
// Идентификаторы типов сигналов
#define SIGNAL_BUY               1                      // Сигнал на покупку
#define SIGNAL_SELL            - 1                      // Сигнал на продажу
#define SIGNAL_NO               0                      // Нет сигнала

#include <stderror.mqh>

//+-------------------------------------------------------------------------------------+
//| Функция деиницилизации эксперта                                                     |
//+-------------------------------------------------------------------------------------+
int init()
{
   
   return ( 0 );
}
//+-------------------------------------------------------------------------------------+
//| Функция деиницилизации эксперта                                                     |
//+-------------------------------------------------------------------------------------+
int deinit()
{
   return ( 0 );
}
//+-------------------------------------------------------------------------------------+
//| Открытие позиций                                                                    |
//+-------------------------------------------------------------------------------------+
bool Trade( int signal, double & priceForBuy, double & priceForSell)
{
 // FindOrders();
  priceForBuy = NormalizeDouble (priceForBuy, Digits );
  priceForSell = NormalizeDouble (priceForSell, Digits );
  
   if (signal == SIGNAL_BUY)
     if (! OrderSend ( Symbol (),OP_BUYLIMIT, i_lots,priceForBuy,slippage,i_sl,i_tp, "" ,i_magicNumber, 3 ))
     return (false);
     
   if (signal == SIGNAL_SELL)
     if (! OrderSend ( Symbol (),OP_SELLLIMIT,i_lots,priceForSell,slippage,i_sl,i_tp, "" ,i_magicNumber, 3 ))
     return (false);
     
   return (true);
}
//+-------------------------------------------------------------------------------------+
//| Получение цены входа в покупку или в продажу                                        |
//+-------------------------------------------------------------------------------------+
double GetPriceToInput( int signal)
{
  firstBarClosed = iClose ( Symbol (), 1440 , 2 );
  secondBarClosed = iClose ( Symbol (), 1440 , 1 );
    
   double deltaForSell = (firstBarClosed - secondBarClosed)/ 2 ;
   double priceForSell = secondBarClosed - deltaForSell;
    
//  return(priceForSell);

  
   double deltaForBuy = (secondBarClosed - firstBarClosed)/ 2 ;
   double priceForBuy = secondBarClosed + deltaForBuy;  
   return (Trade(signal, priceForBuy, priceForSell));
}
//+-------------------------------------------------------------------------------------+
//| Генерация сигнала закрытия, покупки или продажи                                     |
//+-------------------------------------------------------------------------------------+
int GetSignal()
{
   if (firstBarClosed > secondBarClosed)
   return (SIGNAL_BUY);

   if (firstBarClosed < secondBarClosed)
   return (SIGNAL_NO);
}
//+-------------------------------------------------------------------------------------+
//| Функция Start                                                                       |
//+-------------------------------------------------------------------------------------+
int start()
{
   int signal = GetSignal();
    
     if (signal != SIGNAL_NO)
       if (!Trade(signal, priceForBuy, priceForSell))
       return ( 0 );

   return ( 0 );
}

 

Bu arada, hata:

'priceForBuy' - variable not defined    E:\Insall'd soft's\Forex\Admiral Markets\experts\2 Days.mq4 (103, 25)
'priceForSell' - variable not defined   E:\Insall'd soft's\Forex\Admiral Markets\experts\2 Days.mq4 (103, 38)

tam olarak start işlevinde gerçekleşir, bu değişkenler tanımlanmamıştır ve bir yerde değildir. daha fazla. Yani başlamak için bir şey eklenmesi gerekiyor mu?

 
hoz :

Bu arada, hata:

tam olarak start işlevinde gerçekleşir, bu değişkenler tanımlanmamıştır ve bir yerde değildir. daha fazla. Yani başlamak için bir şey eklenmesi gerekiyor mu?

start()'ta tanımlanmaları ve referans olarak çağrılan fonksiyona iletilmeleri gerekir.
 
Reshetov :
start()'ta tanımlanmaları ve referans olarak çağrılan fonksiyona iletilmeleri gerekir.


Bu en kolay seçenektir. Ancak bir programcının makalelerini izliyorum ve başlatma işlevinde hiçbir şey bildirilmiyor.

İşte danışmanına bir bağlantı:

http://www.forextrade.ru/media/Image/MQLabs/181_ag/ChannelByMACross_Expert.mq4

Özellikle kodları yetkin bir şekilde nasıl yazdığıyla çok ilgileniyorum. Bu nedenle, her şeyi ayrı işlevler olarak nasıl yazacağımı öğrenmek ve orada değişken bildirmeden sadece başlamak için en gerekli olanı eklemek istiyorum.

Sonuçta, bir değişkeni bir fonksiyona referans olarak iletirsek, o zaman ayrı çiftiyle değil, ilettiğimiz orijinal değişkenin tamponu ile çalışırız. Yani daha önce hangi fonksiyonda bildirdiğimiz önemli değil. Değil mi?

 
hoz :


Bu en kolay seçenektir. Ancak bir programcının makalelerini izliyorum ve başlatma işlevinde hiçbir şey bildirilmiyor.

Fonksiyonların dışında statik bir değişken tanımlayabilirsiniz ve ardından referans olarak hiçbir şey iletmeniz gerekmez.

saat :

Sonuçta, bir değişkeni bir fonksiyona referans olarak iletirsek, o zaman ayrı çiftiyle değil, ilettiğimiz orijinal değişkenin tamponu ile çalışırız. Yani daha önce hangi fonksiyonda bildirdiğimiz önemli değil. Değil mi?

Yanlış düşün. Bir değişkeni işlev argümanı olarak iletirseniz, işlev gövdesinin bunu bildirmesi gerekmez - argümanda zaten bildirilmiştir. Geçtiği yerde bir işlev bildirmeniz gerekir.
 
hoz :


Bu en kolay seçenektir. Ancak bir programcının makalelerini izliyorum ve başlatma işlevinde hiçbir şey bildirilmiyor.

İşte danışmanına bir bağlantı:

http://www.forextrade.ru/media/Image/MQLabs/181_ag/ChannelByMACross_Expert.mq4

Özellikle kodları yetkin bir şekilde nasıl yazdığıyla çok ilgileniyorum. Bu nedenle, her şeyi ayrı işlevler olarak nasıl yazacağımı öğrenmek ve orada değişken bildirmeden sadece başlamak için en gerekli olanı eklemek istiyorum.

Sonuçta, bir değişkeni bir fonksiyona referans olarak iletirsek, o zaman ayrı çiftiyle değil, ilettiğimiz orijinal değişkenin tamponu ile çalışırız. Yani daha önce hangi fonksiyonda bildirdiğimiz önemli değil. Değil mi?


O da iyi yazdı

okuman

Evet, hattı değiştir

 if (!Trade(signal, priceForBuy, priceForSell))

üzerinde

 if (!GetPriceToInput (signal))                                                                                                         
 
Roman. :

Zaten Diman olduğunda, KİŞİSEL kampta ustalaşacak mısın? :-)

Gerçekten bir yıldır gerçek hayatta henüz hamur kesmedi mi? Aynı yerde, BAŞLANGIÇ miktarları size zayıf tahsis edilmemiş gibi görünüyor? :-)



yakında.
 
Reshetov :

Fonksiyonların dışında statik bir değişken tanımlayabilirsiniz ve ardından referans olarak hiçbir şey iletmeniz gerekmez.

Yanlış düşün. Bir değişkeni işlev argümanı olarak iletirseniz, işlev gövdesinin bunu bildirmesi gerekmez - argümanda zaten bildirilmiştir. Geçtiği yerde bir işlev bildirmeniz gerekir.


Başlangıç işlevinden veya başka bir işlevden geçmemiz önemli değil demek istedim. başka bir işlev.

Bu durumda, double GetPriceToInput(int signal) işlevinde değişkenler bildirdim ve aynı double GetPriceToInput(int signal) işlevinde bildirilen priceForSell ve priceForBuy değişkenlerini referans alarak bool Trade(int signal, double& priceForBuy, double& priceForSell) işlevine ilettim. işlev .

Bu işlevi başlat işlevine ekledim ve orada zaten tanımsız olduklarını görüyorum. Bunu nasıl düzelteceğimi anlamak istiyorum.

Tabii ki, bu 2 değişkeni dediğiniz gibi hemen başlangıçta bildirebilirsiniz, ancak bunları doğrudan double GetPriceToInput(int signal) function içinden de aktarabilirsiniz . Demek istediğim bu.

 
hoz :


Başlangıç işlevinden veya başka bir işlevden geçmemiz önemli değil demek istedim. başka bir işlev.

Bu durumda, double GetPriceToInput(int signal) işlevinde değişkenler bildirdim ve aynı double GetPriceToInput(int signal) işlevinde bildirilen priceForSell ve priceForBuy değişkenlerini referans alarak bool Trade(int signal, double& priceForBuy, double& priceForSell) işlevine ilettim. işlev .

Bu işlevi başlat işlevine ekledim ve orada zaten tanımsız olduklarını görüyorum. Bunu nasıl düzelteceğimi anlamak istiyorum.

Bunları nereye aktardınız ve neden aktarılmadığı yerlere değerler atıyorsunuz?

 
Reshetov :

Bunları nereye aktardınız ve onlara değerleri nereye atadınız?


Peki, double GetPriceToInput(int signal) işlevindeki değişkenlerin değerlerini aldım.

Burada:

 double priceForSell = secondBarClosed - deltaForSell;
 double priceForBuy = secondBarClosed + deltaForBuy;

Bu değerleri döndürüyorum:

 return (priceForSell);
 return (priceForBuy);

Onlar. Değerler zaten f-tsiya bu değişkenleri döndürdü.

Daha sonra bool Trade(int signal, double& priceForBuy, double& priceForSell) fonksiyonuna referansla bu değerleri gönderiyorum:

Burada her şey açık!