MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1286

 
MakarFX :

표시기에서 그러한 글꼴을 선택할 수 있는지 알려주실 수 있습니까?


왜 안 돼? 열거 형과 모든 문제를 만드십시오.

 
Alexey Viktorov :

왜 안 돼? 열거 형과 모든 문제를 만드십시오.

이것은 이해할 수 있지만 설치된 글꼴 목록을 요청하는 방법은 무엇입니까?

 
Nikolai Semko :

글쎄, 당신은 코미디언입니다.

내가 여기서 누구를 십자가에 못 박고 있습니까?


나는 뭔가를 놓쳤다. 고맙습니다. 필요한 것!

 
ANDREY :

이해했다. 도와 주셔서 감사합니다.

어드바이저가 이렇게 많은 주문을 여는 것은 어렵다는 생각이 문득 들었다. 이 코드로 주문 수를 제한하려고 했습니다.

즉, 10:00에만 주문을 엽니다. 그러나 결과는 동일합니다.

2020.10.27 10:25:17.548 코어 1 36Mb의 히스토리 데이터, 64Mb의 틱 데이터를 포함하여 272Mb 메모리 사용



솔직히 말해서 MKL5를 잘 모릅니다. 그러나 논리는 엉터리입니다. 하나의 주문을 열어야 합니다. 이것은 틱 함수의 시작 부분에 시간 변수를 할당하고 마지막에 다른 변수에 할당함으로써 달성됩니다. 중간에 변수가 같지 않으면 주문을 엽니다. 분을 사용한 위의 예는 동일합니다.

 input int       StopLoss= 30 ;       // Stop Loss
input int       TakeProfit= 100 ;   // Take Profit
input double    Lot= 0.1 ;           // Количество лотов для торговли
int A;     //
int tm; 
//+------------------------------------------------------------------+
void OnTick ()
  {
//Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
   MqlDateTime time_now;     // Будет использоваться для
   
 TimeCurrent (time_now);  
 if (! SymbolInfoTick ( _Symbol ,latest_price))
 if ( time_now.hour== 10 && tm != time_now.hour ) // на первом тике, когда time_now.hour станет 10 а tm еще 9
                                           // и на следующем тике tm будет равно 10


   {
         mrequest.action = TRADE_ACTION_DEAL ;                                   // немедленное исполнение
         mrequest.price = NormalizeDouble (latest_price.bid, _Digits );           // последняя цена Bid
         mrequest.sl = NormalizeDouble (latest_price.ask + StopLoss* _Point , _Digits ); // Stop Loss
         mrequest.tp = NormalizeDouble (latest_price.ask - TakeProfit* _Point , _Digits ); // Take Profit
         mrequest.symbol = _Symbol ;                                             // символ
         mrequest.volume = Lot;                                                 // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL ;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_RETURN ;                             // тип исполнения ордера - все или ничего
         mrequest.deviation= 100 ;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend (mrequest,mresult);
    }  

tm= time_now.hour;
     return ;
  }



 
MakarFX :

이것은 이해할 수 있지만 설치된 글꼴 목록을 요청하는 방법은 무엇입니까?

귀하의 예에서는 자체 제작 목록이라고 생각합니다. Windows에 대한 요청 없이.

 
Valeriy Yastremskiy :

솔직히 말해서 MKL5를 잘 모릅니다. 그러나 논리는 엉터리입니다. 하나의 주문을 열어야 합니다. 이것은 틱 함수의 시작 부분에 시간 변수를 할당하고 마지막에 다른 변수에 할당함으로써 달성됩니다. 중간에 변수가 같지 않으면 주문을 엽니다. 분을 사용한 위의 예는 동일합니다.

그래서 그들은 EA의 일을 그들의 마술사들과 독점적으로 하는 것을 추천합니다.

작업이 특정 시간에 하루에 한 번 주문을 여는 것이라면 알고리즘은 다음과 같습니다.

- EA 시작, 열린 주문 수를 확인하고 우리의 마법이 있는 주문이 열려 있으면 다음 틱까지 종료

- 주문이 없으면 EA는 현재 시간과 분이 주어진 시간과 분이 클 때까지 기다립니다.

-이번에 왔어, EA, 주문 내역을 확인하고 우리의 마법으로 주문이 마지막 날에 이루어지지 않으면 주문하고 종료합니다. 종료는 서버 오류를 처리하지 않기 위해 유용합니다. 주문이 이루어지지 않으면 다음 틱에 다시 시도합니다. 이 틱에서 주문을 다시 열기 위한 주기를 구성할 필요가 없습니다.... 하지만 이것은 취향과 작업의 문제이며 가장 간단한 구현 )))

 
Igor Makanu :

그래서 그들은 EA의 일을 그들의 마술사들과 독점적으로 하는 것을 추천합니다.

작업이 특정 시간에 하루에 한 번 주문을 여는 것이라면 알고리즘은 다음과 같습니다.

- EA 시작, 열린 주문 수를 확인하고 우리의 마법이 있는 주문이 열려 있으면 다음 틱까지 종료

- 주문이 없으면 EA는 현재 시간과 분이 주어진 시간과 분이 클 때까지 기다립니다.

-이번에 왔어, EA, 주문 내역을 확인하고 우리의 마법으로 주문이 마지막 날에 이루어지지 않으면 주문하고 종료합니다. 종료는 서버 오류를 처리하지 않기 위해 유용합니다. 주문이 이루어지지 않으면 다음 틱에 다시 시도합니다. 이 틱에서 주문을 다시 열기 위한 주기를 구성할 필요가 없습니다.... 하지만 이것은 취향과 작업의 문제이며 가장 간단한 구현 )))

그들은 아직 마법으로 성장하지 않았습니다. 틀림없이. 물론 5ke에서 딜레마는 오류 분석이 있는 주기에 있거나 틱 단위로 포지션 틱을 열려고 하는 것입니다. 긴 답변의 경우 틱이 더 쉬울 수 있습니다.

 
Valeriy Yastremskiy :

솔직히 말해서 MKL5를 잘 모릅니다. 그러나 논리는 엉터리입니다. 하나의 주문을 열어야 합니다. 이것은 틱 함수의 시작 부분에 시간 변수를 할당하고 마지막에 다른 변수에 할당함으로써 달성됩니다. 중간에 변수가 같지 않으면 주문을 엽니다. 분을 사용한 위의 예는 동일합니다.



매우 감사합니다. 당신이 나에게 준 지식은 나에게 충분하지 않았습니다. 나는 똑같은 것을 시도했지만 네 가지와 유추했다. 이 경우 비유가 부적절하다는 것이 밝혀졌습니다.
다시 감사합니다.

 
Igor Makanu :

그래서 그들은 EA의 일을 그들의 마술사들과 독점적으로 하는 것을 추천합니다.

작업이 특정 시간에 하루에 한 번 주문을 여는 것이라면 알고리즘은 다음과 같습니다.

- EA 시작, 열린 주문 수를 확인하고 우리의 마법이 있는 주문이 열려 있으면 다음 틱까지 종료

- 주문이 없으면 EA는 현재 시간과 분이 주어진 시간과 분이 클 때까지 기다립니다.

-이번에 왔어, EA, 주문 내역을 확인하고 우리의 마법으로 주문이 마지막 날에 이루어지지 않으면 주문하고 종료합니다. 종료는 서버 오류를 처리하지 않기 위해 유용합니다. 주문이 이루어지지 않으면 다음 틱에 다시 시도합니다. 이 틱에서 주문을 다시 열기 위한 주기를 구성할 필요가 없습니다.... 하지만 이것은 취향과 작업의 문제이며 가장 간단한 구현 )))

소중한 정보 감사합니다. 덕분에 mql 5에 대한 이해가 확장되고 깊어졌습니다.
제 코드의 예를 사용하여 사고 방식을 보여주시면 대단히 감사하겠습니다. 이렇게 하면 말씀하신 내용을 빠르고 정확하게 흡수할 수 있습니다.
다시 한 번 진심으로 감사드립니다.

다음은 주문을 10:00에만 열어야 하는 조건을 잘못 작성한 코드입니다.

 input int       StopLoss= 30 ;       // Stop Loss
input int       TakeProfit= 100 ;   // Take Profit
input double    Lot= 0.1 ;           // Количество лотов для торговли
int A;     //

//+------------------------------------------------------------------+
void OnTick ()
  {
//Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
   MqlDateTime time_now;     // Будет использоваться для
   
 TimeCurrent (time_now);  
 if (! SymbolInfoTick ( _Symbol ,latest_price))
 if (time_now.hour== 10 &&time_now.min== 0 )
   {
         mrequest.action = TRADE_ACTION_DEAL ;                                   // немедленное исполнение
         mrequest.price = NormalizeDouble (latest_price.bid, _Digits );           // последняя цена Bid
         mrequest.sl = NormalizeDouble (latest_price.ask + StopLoss* _Point , _Digits ); // Stop Loss
         mrequest.tp = NormalizeDouble (latest_price.ask - TakeProfit* _Point , _Digits ); // Take Profit
         mrequest.symbol = _Symbol ;                                             // символ
         mrequest.volume = Lot;                                                 // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL ;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_RETURN ;                             // тип исполнения ордера - все или ничего
         mrequest.deviation= 100 ;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend (mrequest,mresult);
    }   
     return ;
  }
 
ANDREY :

다음은 주문을 10:00에만 열어야 하는 조건을 잘못 작성한 코드입니다.

나는 순수한 MQL5로 작성하지 않으며 SB CTrade 클래스 를 사용하여 주문할 수 있습니다.

검색 CTTrade SB 사용에 대한 기사가 있습니다.