찻주전자의 질문 - 페이지 5

 

스톱로스의 크기를 200포인트로 변경하는 스크립트를 작성했는데 스톱로스를 옮기는 대신에 뭔가 문제가 있습니다

 //+------------------------------------------------------------------+
//|                                                      traling.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
double BuyStoploss= 200 ;
double SellStoploss= 200 ;
double sl,tp;
void OnStart ()
  {
//---
MqlTradeRequest m_request;
MqlTradeResult m_result;
 if ( PositionSelect ( _Symbol ))
           {
             //--- если позиция buy
             if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY )
              {
               //--- получаем значение стоплосс для позиции buy
               sl=BuyStoploss;
               //--- определяем допустимый уровень установки стоплосс для позиции buy
               double minimal= SymbolInfoDouble ( _Symbol , SYMBOL_BID )- _Point * SymbolInfoInteger ( _Symbol , SYMBOL_TRADE_STOPS_LEVEL );
               //--- нормализация значения
               sl= NormalizeDouble (sl, _Digits );
               //--- нормализация значения
               minimal= NormalizeDouble (minimal, _Digits );
               //--- если на полученный от индикатора уровень невозможно установить стоплосс, 
               //    он будет установлен на ближайший возможный уровень
               sl= MathMin (sl,minimal);
               //--- значение стоплосс позиции
               double possl= PositionGetDouble ( POSITION_SL );
               //--- нормализация значения
               possl= NormalizeDouble (possl, _Digits );
               //--- если новое значение стоплосс выше, чем текущее значение стоплосс, 
               //    будет выполнена попытка переместить стоплосс на новый уровень
               if (sl>possl|| possl== 0 )
                 {
                   //--- заполнение структуры запроса
                  m_request.sl=sl;
                   //--- заполнение структуры запроса
                  m_request.tp= PositionGetDouble ( POSITION_TP );
                   //--- запрос
                   OrderSend (m_request,m_result);
                   //--- проверка результата выполнения запроса
                   if (m_result.retcode!= TRADE_RETCODE_DONE )
                    {
                     //--- вывод в журнал сообщения об ошибке 
                     printf ( "Не удалось переместить стоплосс позиции %s, ошибка: %I64u" , _Symbol ,m_result.retcode);
                     //--- не удалось переместить стоплосс, завершаем выполнение
                     //return(false);
                    }
                 }
              }
           
             if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_SELL )
              {
               sl=SellStoploss;
               //--- прибавляется спред, поскольку sell закрывается по цене Ask
               sl+=( SymbolInfoDouble ( _Symbol , SYMBOL_ASK )- SymbolInfoDouble ( _Symbol , SYMBOL_BID ));
               double minimal= SymbolInfoDouble ( _Symbol , SYMBOL_ASK )+ _Point * SymbolInfoInteger ( _Symbol , SYMBOL_TRADE_STOPS_LEVEL );
               sl= NormalizeDouble (sl, _Digits );
               minimal= NormalizeDouble (minimal, _Digits );
               sl= MathMax (sl,minimal);
               double possl= PositionGetDouble ( POSITION_SL );
               possl= NormalizeDouble (possl, _Digits );
               if (sl<possl || possl== 0 )
                 {
                  m_request.sl=sl;
                  m_request.tp= PositionGetDouble ( POSITION_TP );
                   OrderSend (m_request,m_result);
                   if (m_result.retcode!= TRADE_RETCODE_DONE )
                    {
                     printf ( "Не удалось переместить стоплосс позиции %s, ошибка: %I64u" , _Symbol ,m_result.retcode);
                     //return(false);
                    }
                 }
              }
           }  
  }
//+------------------------------------------------------------------+
 
오류가 무엇입니까?
 
Khomtchenko :

스톱로스의 크기를 200포인트로 변경하는 스크립트를 작성했는데 스톱로스를 옮기는 대신에 뭔가 문제가 있습니다

sl은 어디에나 있지만 가격면에서는 필요합니다.
 
이해했다. 나는 시도 할 것이다
 

여기. SL 및 TP 스크립트가 수행하려는 작업에 대한 메시지를 단순화하고 추가했습니다. 정류장은 이미 가격에 포함되어 있습니다.

 //+------------------------------------------------------------------+
//|                                                      traling.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
double Stoploss= 0.00200 ;
double TP= 0.01200 ;
double sl,tp;
double ask; 
double bid; 
void OnStart ()
  {
//---
MqlTradeRequest m_request;
MqlTradeResult m_result;
MqlTick last_tick;
 SymbolInfoTick ( _Symbol ,last_tick);
 ask=last_tick.ask;
 bid=last_tick.bid;
 if ( PositionSelect ( _Symbol ))
           {
             //--- если позиция buy
             if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY )
              {
                  sl=ask-Stoploss;
                   NormalizeDouble (sl, _Digits );
                  m_request.sl=sl;
                  tp=ask+TP;
                   NormalizeDouble (tp, _Digits );
                   //sl=ask-sl;
                  m_request.tp=tp;
                   Alert ( "SL=" ,sl, " TP=" ,tp);
                   if ( OrderSend (m_request,m_result)) Alert ( "ok" );
                  
                 }
              
           
             if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_SELL )
              {
               sl=bid+Stoploss;
               NormalizeDouble (sl, _Digits );
                  m_request.sl=sl;
                  tp=bid-TP;
                   NormalizeDouble (tp, _Digits );
                  m_request.tp=tp;
                   Alert ( "SL=" ,sl, " TP=" ,tp);
                   if ( OrderSend (m_request,m_result)) Alert ( "ok" );
                  
                 
              }
            }
  }
//+------------------------------------------------------------------+

하지만 아무 일도 일어나지 않는다

 

모두들 안녕. 그러한 시스템에 대한 고문이 있는지 알려주십시오.

'트렌드 추종'이라고 하는 것 같아요.

• 종가가 마지막 20개 바의 최고 가격 보다 높으면 롱 포지션을 엽니다.

• 종가가 마지막 10개 바의 최저 가격보다 낮으면 매수 포지션을 청산합니다.

• 종가가 마지막 20개 바의 최소 가격보다 낮으면 숏 포지션을 엽니다.

• 종가가 마지막 10개 바의 최고가보다 높으면 숏 포지션을 청산합니다.

아니면 좋은 사람들이 그것을 작성하는 데 도움이 될까요?

 
papaklass :

수정을 중지하려면 요청에 특정 필드를 포함해야 합니다.

그러한 요청 후에 정류장이 변경되어야 합니다.

네. 그런데 왜 새로운 정류장에 미끄러짐이 필요한지 궁금합니다.
 

궁금한게 있어서 따로 주제를 만든게 아니라 작성자분 기분 상하지 않으시고 질문 자체가 빠지지 않았으면 합니다.

거래 신호 모듈에 대한 질문 - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal 그리고 예를 들어 MACD 신호에 대한 설명을 들어 보겠습니다. " Divergence is the first analysis the bottom of the oscillator is less than 이전 것, 해당 가격 하단은 이전 것보다 더 깊습니다 " - 이 신호가 검색되는 코드를 살펴보고 SignalMACD.mqh 파일을 열고 조건 대신 IS_PATTERN_USAGE(0) 등 에.

발산 자체가 검색되는 코드를 보는 방법은 무엇입니까? 즉, 한 양초를 다른 표시기와 비교하면 한 막대에서 다른 막대와 같이 어떻게 생겼습니까? 이 코드는 어디에 있습니까?

Документация по MQL5: Стандартная библиотека / Классы торговых стратегий / Модули торговых сигналов
Документация по MQL5: Стандартная библиотека / Классы торговых стратегий / Модули торговых сигналов
  • www.mql5.com
Стандартная библиотека / Классы торговых стратегий / Модули торговых сигналов - Документация по MQL5
 

실제 계정 의 일부 DC는 "."와 같은 모든 종류의 접두사를 기호 이름에 할당합니다. 또는 "FXF".

이 접두사를 어떻게 대체할 수 있습니까?

나는 이것을 좋아했다:

#define DEF_SPEC "FXF"

string SymbolsTrade[] = {"AUDCAD"DEF_SPEC ... - 작동하지 않음

string SymbolsTrade[] = {"AUDCAD"+DEF_SPEC ... - 그것도 작동하지 않습니다

결과적으로 원하는 AUDCADFXF 대신 FXF만 얻습니다.

구현 방법을 알려주지 않습니까?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
 
TG :

궁금한게 있어서 따로 주제를 만든게 아니라 작성자분 기분 상하지 않으시고 질문 자체가 밀리지 않았으면 합니다.

거래 신호 모듈에 대한 질문 - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal 그리고 예를 들어 MACD 신호에 대한 설명을 들어 보겠습니다. " Divergence is the first analysis the bottom of the oscillator is less than 이전 것, 해당 가격 하단은 이전 것보다 더 깊습니다 " - 이 신호가 검색되는 코드를 살펴보고 SignalMACD.mqh 파일을 열고 조건 대신 IS_PATTERN_USAGE(0) 등 에.

발산 자체가 검색되는 코드를 보는 방법은 무엇입니까? 즉, 한 양초를 다른 표시기와 비교하면 다른 막대의 한 막대에서 어떻게 보일까요? 이 코드는 어디에 있습니까?

소스에서 코드를 볼 수 있습니다. 발산을 검색하는 데 두 가지 방법이 사용됩니다.

1. 메서드 bool CSignalMACD::ExtState(int ind) - 검색할 데이터를 준비합니다.

2. 메소드 bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start) - 지정된 매개변수로 시장 모델을 검색합니다.

도움이된다면 다음은 러시아어로 된 방법에 대한 설명입니다.

부울 메서드 CSignalMACD::ExtState(int ind)의 경우

 //--- результатом работы этого метода является битовая карта экстремумов
//--- фактически, битовая карта экстремумов представляет собой "массив" 4-битовых полей
//--- каждый "элемент массива" однозначно описывает соотношение
//--- текущих экстремумов осцилятора и цены с предыдущими
//--- назначение битов элемента анализируемой битовой карты
//--- бит 3 - не используется (всегда 0)
//--- бит 2 - имеет значение 1 если текущий экстремум осцилятора "экстремальней" предыдущего
//---         (более высокий пик или более глубокая впадина), иначе 0
//--- бит 1 - не используется (всегда 0)
//--- бит 0 - имеет значение 1 если текущий экстремум цены "экстремальней" предыдущего
//---         (более высокий пик или более глубокая впадина), иначе 0
//--- кроме того, формируются:
//--- массив значений экстремумов осцилятора,
//--- массив значений экстремумов цены и
//--- массив "расстояний" между экстремумами осцилятора (в барах)
//--- следует отметить, что при использовании результатов расширенной проверки состояния,
//--- нужно учитывать, какой экстремум осцилятора (пик или впадина)
//--- является "точкой отсчёта" (т.е. был обнаружен при анализе первым)
//--- если первым был обнаружен пик, то чётные элементы всех массивов
//--- будут содержать данные о пиках, нечётный данные о впадинах
//--- если первой была обнаружена впадина, соответственно, наоборот

bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start) 메서드의 경우

 //--- битовая карта образца представляет собой "массив" 4-битовых полей
//--- каждый "элемент массива" однозначно описывает искомое соотношение
//--- текущих экстремумов осцилятора и цены с предыдущими
//--- назначение битов элемента образца битовой карты
//--- бит 3 - имеет значение 1 если нам неважно соотношение экстремумов осцилятора
//---         имеет значение 0 если мы хотим "найти" соотношение экстремумов осцилятора определённое значением бита 2
//--- бит 2 - имеет значение 1 если мы хотим "найти" ситуацию когда текущий экстремум осцилятора "экстремальней" предыдущего
//---         (текущий пик более высокий или текущая впадина более глубокая)
//---         имеет значение 0 если мы хотим "найти" ситуацию когда текущий экстремум осцилятора менее "экстремальный" чем предыдущий
//---         (текущий пик менее высокий или текущая впадина менее глубокая)
//--- бит 1 - имеет значение 1 если нам неважно соотношение экстремумов цены
//---         имеет значение 0 если мы хотим "найти" соотношение экстремумов цены определённое значением бита 0
//--- бит 0 - имеет значение 1 если мы хотим "найти" ситуацию когда текущий экстремум цены "экстремальней" предыдущего
//---         (текущий пик более высокий или текущая впадина более глубокая)
//---         имеет значение 0 если мы хотим "найти" ситуацию когда текущий экстремум цены менее "экстремальный" чем предыдущий
//---         (текущий пик менее высокий или текущая впадина менее глубокая)