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

 
Dimka-novitsek :
Bu böyle bir stratejidir. Şu anda görüntüleyebilirim. Ah abim geldi zamanında yetişemiyorum. Ama durum garip.

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? :-)

 
TarasBY :
Başlangıç olarak, terminolojiye karar verin - "tam olarak belirli bir zamanda çalışacak limit-limit" - "limit-limit işe yarayacak" ne anlama geliyor??? Ve bu büyülü süreç hakkında ne kadar çok şey anlatırsanız, onu gerçek hayatta uygulamak o kadar kolay olacaktır.


Evet, kendimi doğru ifade edemedim. Genel olarak. Burada anlaşılırsa, erteleme sadece fiyata göre belirlenir.

İşte kod:

 //+------------------------------------------------------------------+
//|                                                       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 );
}
//+------------------------------------------------------------------+
//+-------------------------------------------------------------------------------------+
//| Получение рыночных данных                                                           |
//+-------------------------------------------------------------------------------------+
//FindOrders()
//+-------------------------------------------------------------------------------------+
//| Получение рыночных данных                                                           |
//+-------------------------------------------------------------------------------------+
void GetMarketInfo()
{
  price_b = MarketInfo ( Symbol (),MODE_BID);
  price_a = MarketInfo ( Symbol (),MODE_ASK);
}
//+-------------------------------------------------------------------------------------+
//| Открытие позиций                                                                    |
//+-------------------------------------------------------------------------------------+
bool Trade( int signal, double & priceForBuy, double & priceForSell)
{
 // FindOrders();
  priceForBuy = NormalizeDouble (priceForBuy, Digits );
  priceForSell = NormalizeDouble (priceForSell, Digits );
  
   if (! IsTesting ())
     GetMarketInfo();
     
   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()
{
  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 (priceForBuy);
  }
}
//+-------------------------------------------------------------------------------------+
//| Генерация сигнала закрытия, покупки или продажи                                     |
//+-------------------------------------------------------------------------------------+
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 );
}


Soru gerçekten zor değil. PriceForBuy ve priceForSell resmi parametrelerini Trade(int signal, double& priceForBuy, double& priceForSell) işlevine ilettim. Referans ile geçirilen parametreler. Böyle mi yapılır? Sonuçta, işlevler global değil, yereldir.

Derleme sırasında bir hata oluştu:

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

Hata nereden? Sonuçta, bu parametreleri GetPriceToInput() işlevinde zaten tanımladım.

 
ve pretzel & iki katına çıktıktan sonra ne için (dürüstçe bilmiyorum) ?
 
YOUNGA :
ve pretzel & iki katına çıktıktan sonra ne için (dürüstçe bilmiyorum) ?

Bu, parametreleri referans olarak iletmek isteyen bir saplantıdır. :-)

 
Roman. :

Bu, parametreleri referans olarak iletmek isteyen bir saplantıdır. :-)



Başka nasıl? Aynı şeyi 100 defa mı sayıyorsunuz?
 
hoz :


Evet, kendimi doğru ifade edemedim. Genel olarak. Burada anlaşılırsa, erteleme sadece fiyata göre belirlenir.

İşte kod:

Soru gerçekten zor değil. PriceForBuy ve priceForSell resmi parametrelerini Trade(int signal, double& priceForBuy, double& priceForSell) işlevine ilettim. Referans ile geçirilen parametreler. Böyle mi yapılır? Sonuçta, işlevler global değil, yereldir.

Derleme sırasında bir hata oluştu:

Hata nereden? Sonuçta, bu parametreleri GetPriceToInput() işlevinde zaten tanımladım.

PriceForBuy ve priceForSell değişkenleri bulunamadı - derleyici diyor. Değişken değerleri referans olarak iletmekle uğraşmanız gerekir.
 
hoz :

Başka nasıl? Aynı şeyi 100 defa mı sayıyorsunuz?

Uzman Danışmanın sinyal kısmını ders kitabında olduğu gibi yapın ve mutlu olacaksınız!

Konudaki tüm linkleri daha önce vermiştim...

 
hoz :

Başka nasıl? Aynı şeyi 100 defa mı sayıyorsunuz?
Fikir DOĞRU, uygulama KAYNAKLANIYOR! :)))
 

Pekala, burada somut bir örnek yok:

https://docs.mql4.com/en/basis/variables/formal

Fonksiyon parametrelerinin benimki gibi olduğu yerde en üstte yazılır, yani. & veri türünden sonra.

 
hoz :

Pekala, burada somut bir örnek yok:

https://docs.mql4.com/en/basis/variables/formal

Fonksiyon parametrelerinin benimki gibi olduğu yerde en üstte yazılır, yani. & veri türünden sonra.

Şu şekilde derlenebilir:

 //+-------------------------------------------------------------------------------------+
//| Получение цены входа в покупку или в продажу                                        |
//+-------------------------------------------------------------------------------------+
bool GetPriceToInput ( int signal)
{
  firstBarClosed = iClose ( Symbol (), 1440 , 2 );
  secondBarClosed = iClose ( Symbol (), 1440 , 1 );

     double deltaForSell = (firstBarClosed - secondBarClosed)/ 2 ;
     double priceForSell = secondBarClosed - deltaForSell;


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

   return ( 0 );
}

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