Questions d'un "mannequin - page 5

 

J'ai fait un script qui change la taille du stop loss à 200 pips, mais il y a une erreur au lieu de déplacer le stop

//+------------------------------------------------------------------+
//|                                                      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);
                    }
                 }
              }
           }  
  }
//+------------------------------------------------------------------+
 
Quelle est l'erreur ?
 
Khomtchenko:

J'ai fait un script qui change la taille du stop loss à 200 pips, mais il y a une erreur au lieu de déplacer le stop

Vous avez du sl partout en pips et vous en avez besoin en prix.
 
Je l'ai. Je vais essayer.
 

Ici. Simplifié et ajouté un message sur ce que SL et TP le script essaie de faire. Les arrêts sont déjà en prix

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

Mais rien ne se passe.

 

Bonjour à tous. Pouvez-vous me dire s'il existe un conseiller expert pour ce système ?

Je crois que ça s'appelle "suivre la tendance".

- Une position longue sera ouverte si le prix de clôture est supérieur au prix maximal des 20 dernières barres ;

- fermer une position longue si le prix de clôture est inférieur au prix minimum des 10 dernières barres ;

- ouvrir une position courte si le prix de clôture est inférieur au prix minimum des 20 dernières barres ; fermer une position courte si le prix de clôture est inférieur au prix minimum des 10 dernières barres.

- fermer une position courte si le prix de clôture est supérieur au prix maximum des 10 dernières barres.

Ou peut-être que des personnes aimables peuvent vous aider à l'écrire ?

 
papaklass:

La modification des arrêts nécessite d'inclure certains champs dans la requête :

C'est ici que votre arrêt doit changer après une telle demande.

Oui. Mais, je me demande pourquoi les nouveaux arrêts doivent glisser ?
 

J'ai une question, mais je n'ai pas décidé de créer un fil de discussion distinct à cause de celle-ci. J'espère que l'auteur ne sera pas offensé et que la question ne sera pas perdue.

La question concerne les modules de signaux de trading - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal et prenons par exemple la description des signaux MACD"Divergence - le premier creux de l'oscillateur analysé est moins profond que le précédent et le creux du prix correspondant est plus profond que le précédent" - il est intéressant de regarder dans le code comment ce signal est recherché. Nous ouvrons SignalMACD.mqh mais il y a des conditions IS_PATTERN_USAGE(0) à la place et ainsi de suite.

Comment puis-je voir le code pour la recherche de la divergence elle-même ? C'est-à-dire, comment se présente la comparaison d'une bougie avec un autre indicateur sur une barre, où se trouve ce code ?

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

Certains DCs de comptes réels attribuent toutes sortes de préfixes comme "." ou "FXF" aux noms des symboles.

Comment puis-je utiliser ces préfixes ?

Je l'ai fait de cette façon :

#define DEF_SPEC "FXF"

string SymbolsTrade[] = {"AUDCAD "DEF_SPEC ... -ne fonctionne pas

string SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ... -Cela ne fonctionne pas comme ça non plus.

Le résultat est que je n'obtiens que FXF au lieu de AUDCADFXF.

Pouvez-vous me dire comment faire ?

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

J'ai une question. J'espère que l'auteur n'est pas offensé et que la question n'est pas perdue.

La question concerne les modules de signaux de trading - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal et prenons par exemple la description des signaux MACD"Divergence - le premier creux de l'oscillateur analysé est moins profond que le précédent et le creux du prix correspondant est plus profond que le précédent" - il est intéressant de regarder dans le code comment ce signal est recherché. Nous ouvrons SignalMACD.mqh mais il y a des conditions IS_PATTERN_USAGE(0) à la place et ainsi de suite.

Comment puis-je voir le code pour la recherche de la divergence elle-même ? C'est-à-dire, comment se présente la comparaison d'une bougie avec un autre indicateur sur une barre, où se trouve ce code ?

Vous pouvez visualiser le code dans le code source. Il existe deux méthodes pour rechercher la divergence :

1. La méthode bool CSignalMACD::ExtState(int ind) - elle prépare les données pour la recherche ;

2. La méthode bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start) recherche un modèle de marché avec les paramètres spécifiés.

Si cela peut aider, voici les commentaires des méthodes en russe :

Pour la méthode bool CSignalMACD::ExtState(int ind)

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

Pour la méthode 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 если мы хотим "найти" ситуацию когда текущий экстремум цены менее "экстремальный" чем предыдущий
//---         (текущий пик менее высокий или текущая впадина менее глубокая)