[ARCHIVE!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 4. - 페이지 513

 
Dimka-novitsek :
이런 전략입니다. 지금 바로 스크리닝할 수 있습니다. 아, 형이 왔는데 제 시간에 못 가요. 그러나 상황이 이상합니다.

이미 Diman이 되면 PERSONAL 캠프를 마스터하시겠습니까? :-)

정말 1년 동안 실생활에서 아직 반죽을 자르지 않았습니까? 같은 곳에서 STARTING 금액이 허약한 당신에게 할당되지 않은 것 같습니까? :-)

 
TarasBY :
먼저 "특정 시간에 정확히 작동하는 한계 한계"라는 용어를 결정하십시오. "한계 한계가 작동합니다"는 무엇을 의미합니까??? 그리고 이 마법 같은 과정에 대해 더 많이 이야기할수록 실생활에서 더 쉽게 구현할 수 있습니다.


네, 제대로 표현하지 못했습니다. 일반적으로. 여기가 분명하면 연기는 가격에 의해서만 결정됩니다.

코드는 다음과 같습니다.

 //+------------------------------------------------------------------+
//|                                                       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 );
}


질문은 그다지 어렵지 않습니다. Trade(int signal, double& priceForBuy, double& priceForSell) 함수형식 매개변수 priceForBuy 및 priceForSell을 전달했습니다. 참조로 전달된 매개변수. 그렇게 된거야? 결국 기능은 전역이 아니라 지역적입니다.

컴파일하는 동안 오류가 발생했습니다.

'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)

어디에서 오류가 발생합니까? 결국 GetPriceToInput() 함수에서 이러한 매개변수를 이미 정의했습니다.

[삭제]  
그리고 프레첼 & 애프터 더블 (나는 솔직히 모르겠다) ?
 
YOUNGA :
그리고 프레첼 & 애프터 더블 (나는 솔직히 모르겠다) ?

이것은 참조로 매개변수를 전달하려는 집착입니다. :-)

 
Roman. :

이것은 참조로 매개변수를 전달하려는 집착입니다. :-)



다른 방법은? 같은 것을 100번 센다?
 
hoz :


네, 제대로 표현하지 못했습니다. 일반적으로. 여기가 분명하면 연기는 가격에 의해서만 결정됩니다.

코드는 다음과 같습니다.

질문은 별로 어렵지 않습니다. priceForBuy 및 priceForSell 형식 매개변수를 Trade(int signal, double& priceForBuy, double& priceForSell) 함수에 전달했습니다. 참조로 전달된 매개변수. 그렇게 된거야? 결국 기능은 전역이 아니라 지역적입니다.

컴파일하는 동안 오류가 발생했습니다.

어디에서 오류가 발생합니까? 결국 GetPriceToInput() 함수에서 이러한 매개변수를 이미 정의했습니다.

priceForBuy 및 priceForSell 변수를 찾을 수 없음 - 컴파일러가 말합니다. 참조에 의한 변수 값 전달을 처리해야 합니다.
 
hoz :

다른 방법은? 같은 것을 100번 센다?

교과서에서와 같이 Expert Advisor의 신호 부분을 확인하면 만족할 것입니다!

이전에 스레드의 모든 링크를 제공했습니다 ...

 
hoz :

다른 방법은? 같은 것을 100번 센다?
아이디어는 정확하고 구현은 LIMPING입니다! :)))
 

여기에 구체적인 예가 없습니다.

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

함수 매개변수가 나와 같은 상단에 작성됩니다. & 데이터 유형 뒤에 .

 
hoz :

여기에 구체적인 예가 없습니다.

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

함수 매개변수가 나와 같은 상단에 작성됩니다. & 데이터 유형 뒤에.

다음과 같이 컴파일될 수 있습니다.

 //+-------------------------------------------------------------------------------------+
//| Получение цены входа в покупку или в продажу                                        |
//+-------------------------------------------------------------------------------------+
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 );
}

코드의 구조가 어떻게 든 "왼쪽"이지만 ...