Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1341

 
DanilaMactep:

J'AI CALCULÉ LE PRIX POUR RÉGLER LE DÉCALAGE COMME CECI (MAKAR, TU N'ES AU MOINS PAS MON GENRE À ÊTRE TOUCHÉ;-))

COMMENT VÉRIFIER SI LA VALEUR OBTENUE SE SITUE DANS LES FOURCHETTES AUTORISÉES ? JE NE COMPRENDS PAS CE QUE JE DOIS FAIRE, ET COMMENT M'ASSURER QUE SI LA VALEUR CALCULÉE EST INFÉRIEURE À CELLE AUTORISÉE, L'ORDRE SERA DE TOUTE FAÇON OUVERT À LA DISTANCE MINIMALE POSSIBLE ?

Essayez ça,

Je pense que vous trouverez la solution.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.07.2013                                                     |
//|  Описание : Выполняет корректирование ценовых уровней под STOPLEVEL.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование торгового инструмента                                 |
//|    op - торговая операция                                                  |
//|    pp - цена открытия/установки                                            |
//|    sl - ценовой уровень StopLoss                                           |
//|    tp - ценовой уровень TakeProfit                                         |
//+----------------------------------------------------------------------------+
void CorrectingPrice(string sy, int op, double& pp, double& sl, double& tp) {
  if (sy=="" || sy=="0") sy=Symbol();
  RefreshRates();
  int    di=MarketInfo(sy, MODE_DIGITS);
  int   msl=MarketInfo(sy, MODE_STOPLEVEL);
  int    sp=MarketInfo(sy, MODE_SPREAD);
  double mp=MarketInfo(sy, MODE_POINT);
  double pa=MarketInfo(sy, MODE_ASK);
  double pb=MarketInfo(sy, MODE_BID);
  double ds=NormalizeDouble(pp-sl, di);
  double dp=NormalizeDouble(pp-tp, di);

  if (msl==0) msl=2*sp;
  switch (op) {
    case OP_BUY:
      pp=pa;
      sl=pp-ds;
      tp=NormalizeDouble(pp-dp, di);
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_SELL:
      pp=pb;
      sl=NormalizeDouble(pp-ds, di);
      tp=pp-dp;
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    case OP_BUYLIMIT:
      if (pp>pa-msl*mp) {
        pp=pa-msl*mp;
        sl=pp-ds;
        tp=NormalizeDouble(pp-dp, di);
      }
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_BUYSTOP:
      if (pp<pa+msl*mp) {
        pp=pa+msl*mp;
        if (sl>0) sl=pp-ds;
        if (tp>0) tp=NormalizeDouble(pp-dp, di);
      }
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_SELLLIMIT:
      if (pp<pb+msl*mp) {
        pp=pb+msl*mp;
        sl=NormalizeDouble(pp-ds, di);
        tp=pp-dp;
      }
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    case OP_SELLSTOP:
      if (pp>pb-msl*mp) {
        pp=pb-msl*mp;
        sl=NormalizeDouble(pp-ds, di);
        tp=pp-dp;
      }
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    default:
      Message("CorrectingPrice(): Неизвестная торговая операция!");
      break;
  }
}
 
Alekseu Fedotov:

Essayez ça,

Je pense que vous aurez le coup de main.

Alexey, merci beaucoup pour ce morceau de code. Mais malheureusement, je ne peux pas lire le code d'autres personnes en raison des conséquences d'une attaque cérébrale. Puis-je vous demander une instruction sur la façon d'utiliser ce code et une recommandation sur ce à quoi il faut l'attacher et comment le faire ?

Voici ce que j'ai compris. Je cherchais un prix minimum pour les barres x comme ceci

  int min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛ
          double min_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МИНИМУМА
          min_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        

mais ce n'est pas correct, parce que j'assigne le prix min aihai, pas le bas. corrigé pour le bas et l'erreur est moindre, mais se produit toujours(((

Si ce n'est pas difficile, envoyez des instructions sur la façon d'utiliser un morceau de code à prix réduit...

 

Rebonjour à tousJ'ai essayé d'appliquer les conseils que vous avez écrits à mon dernier message, mais cela n'a pas aidé. Je reçois toujours l'erreur 130L, mais ce n'est probablement pas le stop loss lui-même, mais le prix ouvert. Le prix ouvert pour un stop d'achat et un stop de vente est obtenu en déterminant le prix maximum/minimum pour un nombre x de bougies, de cette façon.

          int max_bars= iHighest(NULL, // ТЕКУЩИЙ СИМВОЛ
          PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА  УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРА
          MODE_HIGH,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ХАЙ
          range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
          ); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ
          double max_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
          max_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          );  //КОНЕЦ ПОЛУЧЕНИЯ ДАННЫХ ДЛЯ ПОКУПАК*********** 
          
          //----ПОЛУЧЕНИЕ ДАННЫХ ДЛЯ ОТЛОЖЕННЫХ ПРОДАЖ
          
          
                    int min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛ
          PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА  УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРА
          MODE_HIGH,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ХАЙ
          range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
          ); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ
          double min_Price=iLow(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
          min_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          ); // КОНЕЦ АЙЛОУ

Le problème n'est pas avec le stop car j'utilise exactement le même stop et atp et fixe, les ordres de marché s'ouvrent sans erreur. Cela signifie que le problème se situe dans le calcul du prix pour l'établissement d'un ordre en attente. J'ouvre les commandes elles-mêmes comme ceci

OrderSend(Symbol(),OP_SELLSTOP,lot,min_Price,slippages,min_Price+sl , min_Price-tp ,comment_ao_otloj_sell); // ОТКРКЫВВАЕМ ОТЛОЖЕННЫЙ СЕЛ ОРДЕР

OrderSend(Symbol(),OP_BUYSTOP,lot,max_Price,slippages,max_Price-sl,max_Price+tp ,comment_ao_otloj_buy,magik_number,TimeCurrent()+order_life_time); // ОТКРЫВАЕМ ОТЛОЖЕННЫЙ БАЙ ОРДЕР


P/S et j'ai oublié de vous dire que je veux utiliser les ordres en attente pour simuler une sorte de filtre de prix pour l'ouverture d'une position, c'est-à-dire que si le prix va dans la bonne direction, un ordre en attente se déclenchera, mais si ce n'est pas le cas, il sera annulé et je suis hors du marché. Qu'est-ce que je fais de travers dans la détermination du prix d'ouverture ? Et peut-être y a-t-il une solution plus simple pour le filtre de prix pour les transactions ?

p/s très gentiment, si vous écrivez un code qui peut être appliqué, écrivez une instruction détaillée pour celui-ci car j'ai de sérieuses difficultés à lire le code. Une instruction détaillée, je veux dire, à quoi sert ce code et comment il peut être appliqué (pour l'attacher à une variable et faire quelque chose avec elle ou autre chose, et s'il vous plaît écrivez vos commentaires sur le code d'une manière plus compréhensible). Merci d'avance ;-) P / S qui a la connaissance et a l'expérience ne vont pas par, aider un frère - ne pas visser autour ;-) ont à terminer le Graal OP ;-).

 
Collègues !

Qui travaillait avec des objets. Veuillez m'envoyer un exemple de code dans lequel un triangle, une ellipse ou un carré (je crois qu'il a un nom sur le graphique) dessiné manuellement exécuterait une action, par exemple une alerte (si le prix atteint l'objet). Je vous en supplie. Je n'y connais pas grand chose et je ne comprends pas la théorie du livre de référence, mais je soupçonne que le principe est élémentaire.
 
DanilaMactep:

Rebonjour à tousJ'ai essayé d'appliquer les conseils que vous avez écrits à mon dernier message, mais cela n'a pas aidé. Je reçois toujours l'erreur 130L, mais ce n'est probablement pas le stop loss lui-même, mais le prix ouvert. Le prix ouvert pour un stop d'achat et un stop de vente est obtenu en déterminant le prix maximum/minimum pour un nombre x de bougies, de cette façon.

Le problème n'est pas avec le stop car j'utilise exactement le même stop et atp et fixe, les ordres de marché s'ouvrent sans erreur. Cela signifie que le problème se situe dans le calcul du prix pour l'établissement d'un ordre en attente. J'ouvre les commandes elles-mêmes comme ceci


P/S et j'ai oublié de vous dire que je veux utiliser les ordres en attente pour simuler une sorte de filtre de prix pour l'ouverture d'une position, c'est-à-dire que si le prix va dans la bonne direction, un ordre en attente se déclenchera, mais si ce n'est pas le cas, il sera annulé et je suis hors du marché. Qu'est-ce que je fais de travers dans la détermination du prix d'ouverture ? Et peut-être y a-t-il une solution plus simple pour le filtre de prix pour les transactions ?

p/s très gentiment, si vous écrivez un code qui peut être appliqué, écrivez une instruction détaillée pour cela car j'ai de sérieuses difficultés à lire le code. Une instruction détaillée, je veux dire, à quoi sert ce code et comment il peut être appliqué (pour l'attacher à une variable et faire quelque chose avec elle ou autre chose, et s'il vous plaît écrivez vos commentaires sur le code d'une manière plus compréhensible). Merci d'avance ;-) P / S qui a la connaissance et a l'expérience ne vont pas par, aider un frère - ne pas déconner autour ;-) Je dois finir le Graal O_o ;-)

Dans la fonction iLowest, au lieu de MODE_HIGH, insérez MODE_LOW.

 

Pouvez-vous me donner un indice ? J'ai dessiné un segment de ligne sur un graphique. J'ai besoin de connaître les prix de début et de fin du segment. Est-ce que c'est possible ?

Dossiers :
EURUSDM1.png  22 kb
 
Forallf:

Pouvez-vous me donner un indice ? J'ai dessiné un segment de ligne sur un graphique. J'ai besoin de connaître les prix de début et de fin du segment. Est-ce que c'est possible ?

Vous pouvez le faire à
 
Forallf:

Pouvez-vous me donner un indice ? J'ai dessiné un segment de ligne sur un graphique. J'ai besoin de connaître les prix de début et de fin du segment. Est-ce que c'est possible ?

Il est souhaitable que ce segment porte un nom original.

 
Alekseu Fedotov:

Dans la fonction iLowest, au lieu de MODE_HIGH, insérez MODE_LOW.

Merci beaucoup d'avoir remarqué et de m'avoir incité à le faire - j'ai corrigé ce cas et pendant le test de 2 ans, il y a eu 130 26 erreurs. Au même moment, 115 transactions ont été ouvertes normalement
 
Порт-моне тв:
Collègues !

Qui travaillait avec des objets. Veuillez m'envoyer un exemple de code dans lequel un triangle, une ellipse ou un carré (je crois qu'il a un nom sur le graphique) dessiné manuellement exécuterait une action, par exemple une alerte (si le prix atteint l'objet). Je vous en supplie. Je ne connais pas grand chose à ce sujet et ne comprends pas la théorie du livre de référence, mais je soupçonne que le principe est élémentaire.

Quelqu'un peut m'aider ?