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

 
datetime some_time= TimeCurrent ();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P= 1 ;           //Таймфрейм
extern int MagicNumber = 100500 ;   // Установили магик


int start()
{

int send;
                                     
double SL= 200 ;                                   
double TP= 200 ;                       
double Lots= 1 ;       

for ( int i = OrdersTotal (); i >= 0 ; i--)                                            // цикл для проверки ордеров
{
int af= OrderSelect (i, SELECT_BY_POS,MODE_TRADES);                                 // Шаг 1: OrderSelect Выбираем ордер (SELECT_BY_POS - по порядковому номеру), (MODE_TRADES -из отложенных и открытых)

if ((OrderSymbol() == "EURUSD" ) && (OrderMagicNumber() == MagicNumber)) return ( 0 ); // Шаг 2: Если символ EURUSD отсутствует,И если ордер присутствует , и ни один из ордеров НЕ содержит магикномер, то выходим из цикла.( выходим -значит откр. позицию) 
                                                                                    (если какое-либо условие из двух указанных не совпадает, то выходим) 
}
          

             
if ((Close[ 0 ]>High[ 1 ]))
{
send= OrderSend ( "EURUSD" ,OP_BUY,Lots,Ask, 3 ,Bid-SL* Point ,Bid+TP* Point ,MagicNumber);
}

if ((Close[ 0 ]<Low[ 1 ]))  
{
send= OrderSend ( "EURUSD" ,OP_SELL,Lots,Bid, 3 ,Ask+SL* Point ,Ask-TP* Point ,MagicNumber);
}

return ( 0 );
}

나는 가용성에 대한 일종의 정기 조사가 있다는 것을 알고 있습니다. (EURUSD가 있습니까? 그리고 지정된 Magic(s)에 주문이 있습니까?) 그 중 하나가 없으면 포지션을 엽니다 . 두 조건이 모두 일치하는 경우에만 확인을 위해 전송됩니다.

그런 다음 2단계에서 묻습니다. 하나의 주문을 수동으로 열었다고 가정합니다. 그런 다음 우리는 첫 번째 조건(같은 기호를 가짐)에 속하고 이 주문에는 마법이 포함되어 있지 않기 때문에 두 번째 조건에 속하지 않습니다. 조건 중 하나가 일치하지 않으면 코드가 주문을 열어야 합니다. 실제로 그는 그렇게 합니다. 그러나 다음 틱에서 그는 세 번째 주문과 네 번째, 다섯 번째 주문을 엽니 다....

그는 왜 세 번째 주문을 열까요?

그러나 두 가지 조건에 모두 해당하는 두 가지 명령이 있습니다. 발견이 아니라 추가 확인( return(0)으로 점프)이 있어야 합니다.!

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
모두 굿나잇! 차트(사진 첨부)에 직선을 그리고 이 직선의 모든 좌표를 파일에 쓰는 코드를 mql5에 작성할 수 있는지 알려주실 수 있나요? 이 직선의 고장(교차)을 차트로 전문가(로봇)가 추적한 후. 똑바로
 
GlushkoV_V_V :
모두 굿나잇! 차트(사진 첨부)에 직선을 그리고 이 직선의 모든 좌표를 파일에 쓰는 코드를 mql5에 작성할 수 있는지 알려주실 수 있나요? 이 직선의 고장(교차)을 차트로 전문가(로봇)가 추적한 후.

모든 것이 문서 에 있습니다.

Документация по MQL5: Графические объекты / ObjectCreate
Документация по MQL5: Графические объекты / ObjectCreate
  • www.mql5.com
[in]  Номер подокна графика. 0 означает главное окно графика. Указанное подокно должно существовать, в противном случае функция возвращает false. Возвращает true при успешной постановке команды в очередь указанного графика, иначе false. Если объект был уже создан ранее, то производится попытка изменить его координаты. При вызове ObjectCreate...
 
Сергей Таболин :

모든 것이 문서 에 있습니다.

팁을 주셔서 감사합니다. 물론 무료가 아닌 그러한 것을 수집하는 데 도움이 될 수 있습니다.

 
GlushkoV_V_V :

팁을 주셔서 감사합니다. 물론 무료가 아닌 그러한 것을 수집하는 데 도움이 될 수 있습니다.

무료가 아닙니다 - 이것은 당신을 위한 입니다 )))

Торговые приложения для MetaTrader 5 на заказ
Торговые приложения для MetaTrader 5 на заказ
  • www.mql5.com
Убрать из советника второй индикатор заменить другим,изменить условие открытие ордера .Условие сделки покупка: НМА линия вверх второй индикатор столбик гистограмы выше нуля (второй индикатор пересечение нуля точка входа) по закрытой свече если нма и второй индикатор не изменили показания совершается покупка для продаже наоборот.Изменить...
 
정말 감사합니다만, 저에게는 중국어로 코드로 구현하는 방법이 명확하지 않은 것과 같습니다.
 
Alexey Belyakov :

나는 가용성에 대한 일종의 정기 조사가 있다는 것을 알고 있습니다. (EURUSD가 있습니까? 그리고 지정된 Magic(s)에 주문이 있습니까?) 그 중 하나가 없으면 포지션을 엽니다 . 두 조건이 모두 일치하는 경우에만 확인을 위해 전송됩니다.

그런 다음 2단계에서 묻습니다. 하나의 주문을 수동으로 열었다고 가정합니다. 그런 다음 우리는 첫 번째 조건(같은 기호를 가짐)에 속하고 두 번째 조건에 속하지 않습니다. 이 주문에는 마법이 포함되어 있지 않기 때문입니다. 조건 중 하나가 일치하지 않으면 코드에서 주문을 시작해야 합니다. 실제로 그는 그렇게 합니다. 그러나 다음 틱에서 그는 세 번째 주문과 네 번째, 다섯 번째 주문을 엽니 다....

그는 왜 세 번째 주문을 열까요?

그러나 두 가지 조건에 모두 해당하는 두 가지 명령이 있습니다. 발견이 아니라 추가 확인( return(0)으로 점프)이 있어야 합니다.!

== - 같으면 != - 같지 않으면. Continuo - 루프 반복의 끝과 루프의 새로운 반복 시작. Break - 루프의 끝과 루프 다음의 연산자로의 전환, return - 함수의 끝, 귀하의 경우 Onstart 및 새 틱 대기. 그리고 마법 주문이 열려 있으면 기능을 완료하고 새 틱을 기다려야 합니다.

문제는 현재 창에서 주문을 열려면 왜 악기를 명시적으로 등록해야 합니까? 아니면 다른 악기의 창에서 주문을 열겠습니까? 또한 얼마나 많은 주문을 개설하고 싶은지 명확하지 않습니다. 코드의 논리에 따르면 하나의 주문만 열 수 있으며 닫힌 후에만 두 번째 주문이 열립니다. 하나의 마법과 하나의 열린 창 도구가 있습니다. 또한 주문을 여는 조건은 Eurobucks가 아닌 Current Instrument에 대해 확인됩니다.

 datetime some_time= TimeCurrent ();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P= 1 ;           //Таймфрейм
extern int MagicNumber = 100500 ;   // Установили магик


int start()
{

int send;
                                     
double SL= 200 ;                                   
double TP= 200 ;                       
double Lots= 1 ;       

for ( int i = OrdersTotal (); i >= 0 ; i--)                                             // цикл для проверки ордеров
{
bool af= OrderSelect (i, SELECT_BY_POS,MODE_TRADES);     // OrderSelect возвращает тип bool                             
                                               // Шаг 1: OrderSelect Выбираем ордер 
                                   //(SELECT_BY_POS - по порядковому номеру), (MODE_TRADES -из отложенных и открытых)

if ((OrderSymbol() == Symbol ()) && (OrderMagicNumber() == MagicNumber)) return ( 0 ); // Шаг 2: Если символ Выбранного ордера 
                                        // равен EURUSD (заменено на текущий инструмент открытого окна) ,
                                       // И если магик Выбранного ордера равен магик то выходим из функции Онстарт .
// Если же наш ордер не будет выбран из ордеров терминала, то цикл закончится и начнется выставление ордеров. 
                                                                                   
}
          

             
if ((Close[ 0 ]>High[ 1 ])) // клоз и хай здесь для текущего окна и инструмента . 
{
send= OrderSend ( Symbol (),OP_BUY,Lots,Ask, 3 ,Bid-SL* Point ,Bid+TP* Point ,MagicNumber); // так же здесь цены аск и бид тоже для текущего инструмента
}

if ((Close[ 0 ]<Low[ 1 ]))  
{
send= OrderSend ( Symbol (),OP_SELL,Lots,Bid, 3 ,Ask+SL* Point ,Ask-TP* Point ,MagicNumber); // и поинт кстати тоже.
}

return ( 0 );
}
 
Valeriy Yastremskiy :

== - 같으면 != - 같지 않으면. Continuo - 루프 반복의 끝과 루프의 새로운 반복 시작. Break - 루프의 끝과 루프 다음의 연산자로의 전환, return - 함수의 끝, 귀하의 경우 Onstart 및 새 틱 대기. 그리고 마법 주문이 열려 있으면 기능을 완료하고 새 틱을 기다려야 합니다.

문제는 현재 창에서 주문을 열려면 왜 악기를 명시적으로 등록해야 합니까? 아니면 다른 악기의 창에서 주문을 열겠습니까? 또한 얼마나 많은 주문을 개설하고 싶은지 명확하지 않습니다. 코드의 논리에 따르면 하나의 주문만 열 수 있으며 닫힌 후에만 두 번째 주문이 열립니다. 하나의 마법과 하나의 열린 창 도구가 있습니다. 또한 주문을 여는 조건은 Eurobucks가 아닌 Current Instrument에 대해 확인됩니다.

- 예, 현재 창에서 열고 싶습니다.

- 영장 하나. 다음 주문은 이전 주문이 마감될 때까지 열리지 않습니다.

"또한 주문을 여는 조건은 Eurobucks가 아니라 Current Instrument에 대해 확인 됩니다." - 그 다음에 ?

((OrderSymbol() == "EURUSD" )  ???
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
Alexey Belyakov :

- 예, 현재 창에서 열고 싶습니다.

- 영장 하나. 다음 주문은 이전 주문이 마감될 때까지 열리지 않습니다.

"또한 주문을 여는 조건은 Eurobucks가 아니라 Current Instrument에 대해 확인 됩니다." - 그 다음에 ?

그리고 예를 들어, 유로 벅스가 아닌 유로 파운드의 경우 선택한 주문의 기호를 유로 벅스와 비교하는 창이 열려 있습니다. 참이면 유로 벅스에 대한 주문이 있고 우리의 마법이 있으면 반환 Onstart 기능에서, 그리고 그렇지 않은 경우 우리는 유로백에 주문을 넣지만 유로파운드에 대해 종가, 고가, 매수가, 입찰가를 갖게 됩니다. 이러한 도구에 대한 입찰과 요청이 다르기 때문에 주문을 열 때 오류가 발생합니다. 그리고 Symbol()은 현재 창의 기호를 반환하며 오류는 발생하지 않습니다.

그리고 메타에디터의 템플릿을 사용하면 왼쪽 상단에 만들기 버튼이 있습니다. onstart 함수는 여전히 사용되지만 이것은 정확하지 않지만 onstart는 스크립트용입니다. 올바른 템플릿입니다.

 //+------------------------------------------------------------------+
//|                                                    forumtest.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                                  https://qstr.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link        "https://qstr.ru"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   
  }
//+------------------------------------------------------------------+

올바른 코드입니다. 주문에 대한 설명을 놓쳤고 코드의 마법이 고려되지 않았습니다. 여는 줄에 대한 경고에서 숫자를 문자열로 암시적 유형 변환!!!

 //+------------------------------------------------------------------+
//|                                                    forumtest.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                                  https://qstr.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link        "https://qstr.ru"
#property version    "1.00"
#property strict

datetime some_time= TimeCurrent ();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P= 1 ;           //Таймфрейм
extern int MagicNumber = 100500 ;   // Установили магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   int send;
                                     
double SL= 200 ;                                   
double TP= 200 ;                       
double Lots= 1 ;       

for ( int i = OrdersTotal (); i >= 0 ; i--)                                             // цикл для проверки ордеров
{
bool af= OrderSelect (i, SELECT_BY_POS,MODE_TRADES);     // OrderSelect возвращает тип bool                           
                                               // Шаг 1: OrderSelect Выбираем ордер 
                                   //(SELECT_BY_POS - по порядковому номеру), (MODE_TRADES -из отложенных и открытых)

if ((OrderSymbol() == Symbol ()) && (OrderMagicNumber() == MagicNumber)) return ; // Шаг 2: Если символ Выбранного ордера 
                                         //равен EURUSD (заменено на текущий инструмент открытого окна) ,
                                       // И если магик Выбранного ордера равен магик то выходим из функции Онстарт.
// Если же наш ордер не будет выбран из ордеров терминала, то цикл закончится и начнется выставление ордеров. 
                                                                                   
}
          

             
if ((Close[ 0 ]>High[ 1 ])) // клоз и хай здесь для текущего окна и инструмента. 
{
send= OrderSend ( Symbol (),OP_BUY,Lots,Ask, 3 ,Bid-SL* Point ,Bid+TP* Point , "My order" ,MagicNumber, 0 , clrGreen ); // так же здесь цены аск и бид тоже для текущего инструмента

}

if ((Close[ 0 ]<Low[ 1 ]))  
{
send= OrderSend ( Symbol (),OP_SELL,Lots,Bid, 3 ,Ask+SL* Point ,Ask-TP* Point , "My order" ,MagicNumber, 0 , clrGreen ); // и поинт кстати тоже.
}

return ;
  }
//+------------------------------------------------------------------+
 
Valeriy Yastremskiy :

당신의 예에는 많은 실수가 있습니다

 for ( int i = OrdersTotal (); i >= 0 ; i--)  

해야한다:

 for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)  

여기 가격은 정규화되지 않았습니다. OrderSend (Symbol(),OP_BUY,Lots,Ask,3, Bid-SL*Point,Bid+TP*Point, "My order",MagicNumber,0,clrGreen);

여기서 논리가 전혀 명확하지 않습니다. 조건이 false인 경우 OnTick()을 종료하는 이유는 무엇입니까?

 if ((OrderSymbol() == Symbol ()) && (OrderMagicNumber() == MagicNumber)) return ;

아마도 주문 을 통해 정렬하는 주기를 계속하고 주문이 몇 개인지 계산 해야 할 것입니다.

IMHO, 또는 KB에서 검색하여 "KimIV의 유용한 기능만"으로 주제를 찾거나 주문 계산 및 새 주문으로 조언자를 만드는 방법을 참조하십시오. 귀하의 예는 논리가 매우 간단하며 앞으로 수정하기 어려울 것입니다. 다른 작업을 위해 ... 글쎄, 아마도 그는 나사를 조이고 싶어 할 것입니다.