MQL5에 기능이 있나요??? 왜 그런 메시지가 수신되는지 알고 싶습니다 2021.02.08 21:29:20.876my_first_ea_sartrailing(BRN,M5)경고: 판매 주문 요청 실패 - 오류 코드: 4756
//--- собираем все вместеif (Sell_Condition_1 && Sell_Condition_2)
{
if (Sell_Condition_3 && Sell_Condition_4)
{
// есть ли в данный момент открытая позиция на продажу?if (Sell_opened)
{
Alert ( "Уже есть позиция на продажу!!!" );
return ; // не добавлять к открытой позиции на продажу
}
mrequest.action = TRADE_ACTION_DEAL ; // немедленное исполнение
mrequest.price = NormalizeDouble (latest_price.bid, _Digits ); // последняя цена Bid
mrequest.sl = NormalizeDouble (latest_price.bid + STP* _Point , _Digits ); // Stop Loss
mrequest.tp = NormalizeDouble (latest_price.bid - TKP* _Point , _Digits ); // Take Profit
mrequest.symbol = _Symbol ; // символ
mrequest.volume = Lot; // количество лотов для торговли
mrequest.magic = EA_Magic; // Magic Number
mrequest.type= ORDER_TYPE_SELL ; // ордер на продажу
mrequest.type_filling = ORDER_FILLING_FOK ; // тип исполнения ордера - все или ничего
mrequest.deviation= 100 ; // проскальзывание от текущей цены//--- отсылаем ордерOrderSend (mrequest,mresult);
// анализируем код возврата торгового сервераif (mresult.retcode== 10009 || mresult.retcode== 10008 ) //Request is completed or order placed
{
Alert ( "Ордер Sell успешно помещен, тикет ордера #:" ,mresult.order, "!!" );
}
else
{
Alert ( "Запрос на установку ордера Sell не выполнен - код ошибки:" , GetLastError ());
return ;
}
}
}
return ;
}
코드에서 이 줄을 이해하는 방법을 알려주십시오 -- CParabolicStop *SARTrailing[];
CNRTRSstop *NRTRTrailing[]; CParabolicStop 및 CNRTRStop이 클래스, * 포인터, 배열 SARTrailing[] 및 NRTRTrailing[]임을 이해합니다. 그렇다면 이 행은 무엇을 의미합니까? 이 EA https://www.mql5.com/en/articles/134의 기사에 따르면 --- 그것을 이해하는 방법? 그리고 이러한 배열은 정확히 어디에서 생성됩니까? 클래스를 배열에 로드하는 것이 정말로 가능합니까? 아니면 클래스 객체? 그리고 실용적인 관점에서 그것은 무엇을 위한 것입니까?
//+------------------------------------------------------------------+//| Sample_TrailingStop.mq5 |//| MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"MetaQuotes Software Corp."#property link"http://www.mql5.com"#property version"1.00"#include <Sample_TrailingStop.mqh> // подключение класса трейлинга//--- input parametersinputdouble SARStep = 0.02 ; // Шаг Parabolicinputdouble SARMaximum = 0.02 ; // Максимум Parabolicinputint NRTRPeriod = 40 ; // Период NRTRinputdouble NRTRK = 2 ; // Коэффициент NRTRstring Symbols[]={ "EURUSD" , "GBPUSD" , "USDCHF" , "USDJPY" };
CParabolicStop *SARTrailing[];
CNRTRStop *NRTRTrailing[];
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit ()
{
ArrayResize (SARTrailing, ArraySize (Symbols)); // изменение размера в соответствии с количеством используемых символовArrayResize (NRTRTrailing, ArraySize (Symbols)); // изменение размера в соответствии с количеством используемых символов for ( int i= 0 ;i< ArraySize (Symbols);i++)
{ // для всех символов
SARTrailing[i]= new CParabolicStop(); // создание экземпляра класса CParabolicStop
SARTrailing[i].Init(Symbols[i], PERIOD_CURRENT , false , true , true , 5 , 15 +i* 17 ,Silver,Blue); // инициализация экземпляра класса CParabolicStop if (!SARTrailing[i].SetParameters(SARStep,SARMaximum))
{ // установка параметров экземпляра класса CParabolicStop Alert ( "trailing error" );
return (- 1 );
}
SARTrailing[i].StartTimer(); // запуск таймера//----
NRTRTrailing[i]= new CNRTRStop(); // создание экземпляра класса CNRTRStop
NRTRTrailing[i].Init(Symbols[i], PERIOD_CURRENT , false , true , true , 127 , 15 +i* 17 ,Silver,Blue); // инициализация экземпляра класса CNRTRStop if (!NRTRTrailing[i].SetParameters(NRTRPeriod,NRTRK))
{ // установка параметров экземпляра класса CNRTRcStop Alert ( "trailing error" );
return (- 1 );
}
NRTRTrailing[i].StartTimer(); // запуск таймера
}
return ( 0 );
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit ( constint reason)
{
for ( int i= 0 ;i< ArraySize (Symbols);i++)
{
SARTrailing[i].Deinit();
NRTRTrailing[i].Deinit();
delete (SARTrailing[i]);
delete (NRTRTrailing[i]);
}
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick ()
{
for ( int i= 0 ;i< ArraySize (Symbols);i++)
{
SARTrailing[i].DoStoploss();
NRTRTrailing[i].DoStoploss();
}
}
//+------------------------------------------------------------------+voidOnTimer ()
{
for ( int i= 0 ;i< ArraySize (Symbols);i++)
{
SARTrailing[i].Refresh();
NRTRTrailing[i].Refresh();
}
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnChartEvent ( constint id,
constlong &lparam,
constdouble &dparam,
conststring &sparam
)
{
for ( int i= 0 ;i< ArraySize (Symbols);i++)
{
SARTrailing[i].EventHandle(id,lparam,dparam,sparam);
NRTRTrailing[i].EventHandle(id,lparam,dparam,sparam);
}
}
//+------------------------------------------------------------------+
그리고 이 별표가 포인터 *로 쓰여진 곳을 문서에서 표시하는 것이 어렵지 않다면. 어쩐지 봤는데 이미 교과서를 뒤져도 못 찾겠어((((
Основное правило трейдера - дай прибыли расти, обрезай убытки! В статье рассматривается один из основных технических приемов, позволяющий следовать этому правилу - перемещение уровня защитной остановки (уровня Stoploss) вслед за растущей прибылью позиции, другими словами - скользящий стоп или трейлинг стоп (trailingstop). Приводится пошаговая процедура создания класса для трейлинг стопа на индикаторах SAR и NRTR, который каждый желающий сможет за 5 минут встроить в своего эксперта или использовать независимо для управления позициями на своем счете.
예를 들어, 우리는 두 개의 선을 취합니다. 하나의 추세선은 위쪽이고 두 번째 추세선도 아래쪽이며 서로 위에 놓여 있고 두 선 사이에 교차점이 나타납니다. 이 점이 시간상 15-30이라고 가정해 보겠습니다. 어느 쪽에서든 시작하기 위해 정확히 같은 시간에 자동으로 주문을 여는 방법, 알고리즘이 이러한 점을 찾고 위치를 여는 방법은 무엇입니까? 설명과 의견을 부탁드립니다.
여기요!!! 그런 질문이 있습니까? 배열로 수집해야 하고 표시기는 다른 시간대에 처리하지만 다음과 같이 나타납니다.
Fractal= iFractals ( Symbol (),tik);
수 없습니다((이상합니다. 이 매개변수에 소수를 사용할 수 있지만 숫자 상수가 있는 변수는 사용할 수 없는 이유는 무엇입니까?
voidOnTick ()
{
for ( int tik = 1 ; tik <= 6 ; tik++)
{
Fractal= iFractals ( Symbol (),tik); // Вот эта tik переменная вызывает ошибку при компиляции
switch (tik)
{
case1 :
CopyBuffer (Fractal, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_W1 ),FractalUP_W1); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer (Fractal, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_W1 ),FractalDown_W1); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries (FractalUP_W1, true ); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
;
break ;
case2 :
CopyBuffer (Fractal, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_D1 ),FractalUP_D1); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer (Fractal, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_D1 ),FractalDown_D1); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries (FractalUP_D1, true ); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries (FractalDown_D1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
;
break ;
case3 :
CopyBuffer (Fractal, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_H4 ),FractalUP_H4); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer (Fractal, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_H4 ),FractalDown_H4); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries (FractalUP_H4, true ); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries (FractalDown_H4, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
;
break ;
case4 :
CopyBuffer (Fractal, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_H1 ),FractalUP_H1); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer (Fractal, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_H1 ),FractalDown_H1); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries (FractalUP_H1, true ); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries (FractalDown_H1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
;
break ;
case5 :
CopyBuffer (Fractal, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_M30 ),FractalUP_30); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer (Fractal, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_M30 ),FractalDown_30); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries (FractalUP_30, true ); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries (FractalDown_30, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
;
break ;
case6 :
CopyBuffer (Fractal, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_M15 ),FractalUP_15); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer (Fractal, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_M15 ),FractalDown_15); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries (FractalUP_15, true ); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries (FractalDown_15, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
;
break ;
}
}
Kira27 : 여기요!!! 그런 질문이 있습니까? 배열로 수집해야 하고 표시기는 다른 시간대에 처리하지만 다음과 같이 나타납니다. 할 수 없습니다(( 이상합니다. 이 매개 변수에 소수를 사용할 수 있는 이유는 무엇입니까? 하지만 숫자 상수가 있는 변수는 사용할 수 없습니까?
그리고 다른 통화 쌍에 대해 이 값을 얻는 방법은 무엇입니까?
말해 주세요.
내가 이해하는 _Digits는 무엇입니까?
그리고 다른 통화 쌍에 대해 이 값을 얻는 방법은 무엇입니까?
말해 주세요.
SYMBOL_DIGITS
쉼표 뒤의 여러 기호
정수
MqlTradeRequest mrequest ???
MQL5에 기능이 있나요??? 왜 그런 메시지가 수신되는지 알고 싶습니다 2021.02.08 21:29:20.876 my_first_ea_sartrailing(BRN,M5) 경고: 판매 주문 요청 실패 - 오류 코드: 4756
여기요!!! 완료된 구조를 로그에 표시하는 방법을 알려주세요.
MqlTradeRequest mrequest ???
MQL5에 기능이 있나요??? 왜 그런 메시지가 수신되는지 알고 싶습니다 2021.02.08 21:29:20.876 my_first_ea_sartrailing(BRN,M5) 경고: 판매 주문 요청 실패 - 오류 코드: 4756
https://www.mql5.com/ru/forum/327894
다음 은 대본입니다.창에서 경고 대화 상자 를 프로그래밍 방식으로 제거하는 방법은 무엇입니까?
그리고 이 별표가 포인터 *로 쓰여진 곳을 문서에서 표시하는 것이 어렵지 않다면. 어쩐지 봤는데 이미 교과서를 뒤져도 못 찾겠어((((
모든 것이 가능하며 지표를 사용하지 않고 거래를 열고 닫는 알고리즘을 만드는 방법
예를 들어, 우리는 두 개의 선을 취합니다. 하나의 추세선은 위쪽이고 두 번째 추세선도 아래쪽이며 서로 위에 놓여 있고 두 선 사이에 교차점이 나타납니다. 이 점이 시간상 15-30이라고 가정해 보겠습니다. 어느 쪽에서든 시작하기 위해 정확히 같은 시간에 자동으로 주문을 여는 방법, 알고리즘이 이러한 점을 찾고 위치를 여는 방법은 무엇입니까? 설명과 의견을 부탁드립니다.
그러한 T3를 기반으로 Expert Advisor를 만들 수 있습니까?Fractal= iFractals ( Symbol (),tik);
수 없습니다((이상합니다. 이 매개변수에 소수를 사용할 수 있지만 숫자 상수가 있는 변수는 사용할 수 없는 이유는 무엇입니까?
여기요!!! 그런 질문이 있습니까? 배열로 수집해야 하고 표시기는 다른 시간대에 처리하지만 다음과 같이 나타납니다.
할 수 없습니다(( 이상합니다. 이 매개 변수에 소수를 사용할 수 있는 이유는 무엇입니까? 하지만 숫자 상수가 있는 변수는 사용할 수 없습니까?
기간이 있어야 하기 때문에
식별자
설명
PERIOD_CURRENT
현재 기간
PERIOD_M1
1 분
PERIOD_M2
2분
PERIOD_M3
3 분
PERIOD_M4
4분
PERIOD_M5
5 분
PERIOD_M6
6분
PERIOD_M10
10 분
PERIOD_M12
12분
PERIOD_M15
15 분
PERIOD_M20
20 분
PERIOD_M30
30 분
PERIOD_H1
1 시간
PERIOD_H2
2시간
PERIOD_H3
3 시간
PERIOD_H4
4 시간
PERIOD_H6
6 시간
PERIOD_H8
8시
PERIOD_H12
12 시간
PERIOD_D1
1 일
PERIOD_W1
일주
PERIOD_MN1
1 개월
여기요!!! 그런 질문이 있습니까? 배열로 수집해야 하고 표시기는 다른 시간대에 처리하지만 다음과 같이 나타납니다.
수 없습니다((이상합니다. 이 매개변수에 소수를 사용할 수 있지만 숫자 상수가 있는 변수는 사용할 수 없는 이유는 무엇입니까?
MQL5의 표시기 핸들은 한 번 생성되어야 합니다!!! 그리고 OnInit()에서 해야 합니다!!!