Questions des débutants MQL5 MT5 MetaTrader 5 - page 120

 

            int digits = (int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);       // number of decimal places
            double point = SymbolInfoDouble(_Symbol,SYMBOL_POINT);            // point
            double ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);                // current price for closing SHORT
            double SL = ask-_SL*point;                                        // unnormalized SL value
            SL = NormalizeDouble(SL,digits);                                  // normalizing Stop Loss
            double   TP = ask+_TP*point;                                      // unnormalized TP value
            TP = NormalizeDouble(TP,digits);                                  // normalizing Take Profit
            double   open_price = SymbolInfoDouble(_Symbol,SYMBOL_BID);

            if(!trade.Buy(Volume,_Symbol,open_price,SL,TP,""))
               {
                  //--- failure message
                  Print("Sell() method failed. Return code=",trade.ResultRetcode(),
                  ". Code description: ",trade.ResultRetcodeDescription());
                  return (false);             
               }
            else
               {
                  Print("Sell() method executed successfully. Return code=",trade.ResultRetcode(),
                  " (",trade.ResultRetcodeDescription(),")");
               }

Dites-moi, s'il vous plaît, pourquoi dans le testeur de stratégie je ne fixe pas de stop loss et de profit et ouvre seulement une position au prix du marché ?

J'utilise CTrade (trade.Buy) pour ouvrir une position.

J'ai essayé de l'ouvrir avec (trade.PositionOpen), la même chose, il s'ouvre et met des stops sur la démo, les stops sont 0 dans le Strategy Tester, je ne sais pas quel peut être le problème.

 
Bonjour, chers programmeurs. Je pense que les programmeurs sont comme des dieux - créer quelque chose qui fonctionne à partir de rien, de l'air et créer des choses matérielles est juste fantastique... J'ai lu un article sur le temps, mais il ne dit rien sur le fait de définir une périodicité, pas même une périodicité, mais d'activer et de désactiver un conseiller expert à certains moments. Je ne sais pas si quelqu'un a déjà posé cette question. Je dois renommer mon EA pour qu'il démarre et s'arrête à des moments différents, mais comme MT5 n'a qu'une seule paire - un EA, je dois passer de l'un à l'autre manuellement. Merci
 
Top2n:

Je comprends que je peux le faire manuellement, mais j'ai besoin d'un robot pour le faire.

Comment créer une fonction pour modifier une commande ?

https://www.mql5.com/ru/articles/134
Как создать свой Trailing Stop
Как создать свой Trailing Stop
  • 2010.08.05
  • Dmitry Fedoseev
  • www.mql5.com
Основное правило трейдера - дай прибыли расти, обрезай убытки! В статье рассматривается один из основных технических приемов, позволяющий следовать этому правилу - перемещение уровня защитной остановки (уровня Stoploss) вслед за растущей прибылью позиции, другими словами - скользящий стоп или трейлинг стоп (trailingstop). Приводится пошаговая процедура создания класса для трейлинг стопа на индикаторах SAR и NRTR, который каждый желающий сможет за 5 минут встроить в своего эксперта или использовать независимо для управления позициями на своем счете.
 
J'ai défini des barres de suivi, mais elles ne s'activent et ne se désactivent pas au bon moment, et elles ne tiennent pas compte du renversement de tendance. L'idée est la suivante : après le trailing stop, généralement à la fin d'une période, par exemple une heure ou 15 minutes, attendez quelques minutes et laissez-le se rallumer et déterminez la disposition par l'indicateur et passez au stop suivant...:-))))
 
Bonjour, pouvez-vous me dire s'il y a une différence pour un EA : dépôt minimum de 1000& (compte en dollars) ou 1000rubles (compte en roubles) ?
 
Pavel777:
Bonjour, pouvez-vous me dire s'il y a une différence pour un EA : un dépôt minimum de 1000& (compte en dollars) ou 1000rubles (compte en roubles) ?
Tout dépend du conseiller expert et pas seulement. Je pense que l'élément principal est la taille du lot de l'EA.
 

Messieurs, aidez-moi ! !! Déjà se décourager à la dernière étape, à partir d'une stratégie toute faite. On ne peut pas faire la moyenne d'un échange, par

 bool PositionModify(const string smb,const double SL,const double TP)
  {       
      MqlTradeRequest mrequest={0};
      MqlTradeResult  mresult ={0};
      
      mrequest.action   = TRADE_ACTION_SLTP;
      mrequest.symbol = _Symbol;   
      mrequest.sl       = SL;
      mrequest.tp       = TP;
      
      OrderSend( mrequest, mresult );
      if( mresult.retcode == 10009 || mresult.retcode == 10008 )//запрос выполнен или ордер успешно помещен
      {          
         Alert( "Стопка прошла#:", mresult.order, "!!" );
      }
      else
      {
         Alert( "Стопка не прошла - код ошибки:", GetLastError() );
         return( false );
      }   
   return( true );
  }

J'essaie de faire une moyenne des échanges. Mais dans les paramètres.

PositionModify(Symbol,SL,ТР)

Je ne peux pas déterminer le prix d'ouverture car j'obtiens le prix d'ouverture et je veux le prix qui a été déplacé suite au calcul de la moyenne.

Ou juste à travers l'historique des commandes pour connaître le prix de la première et de la deuxième commande et déjà sur la base de ces données pour faire la moyenne, je ne veux pas de cette façon c'est trop compliqué pour moi !

 datetime end=TimeCurrent();                 // текущее серверное время
   datetime start=end-PeriodSeconds(PERIOD_D1);// установим начало на сутки назад
//--- запросим в кэш программы нужный интервал торговой истории
   HistorySelect(start,end);
//--- получим количество сделок в истории
   int deals=HistoryDealsTotal();
//--- получим тикет сделки, имеющей последний индекс в списке
   ulong deal_ticket=HistoryDealGetTicket(deals-1);
   if(deal_ticket>0) // получили в кэш сделку, работаем с ней
     {
      //--- тикет ордера, на основании которого была проведена сделка
      ulong order     =HistoryDealGetInteger(deal_ticket,DEAL_ORDER);
      long order_magic=HistoryDealGetInteger(deal_ticket,DEAL_MAGIC);
      long pos_ID     =HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID);
    

double priceh   =HistoryDealGetInteger(deal_ticket,DEAL_PRICE);  // не могу определить цену открытия

      PrintFormat("Сделка #%d по ордеру #%d с ORDER_MAGIC=%d участвовала в позиции %d",                   deals-1,order,order_magic,pos_ID);      }    else              // неудачная попытка получения сделки      {       PrintFormat("Всего в истории %d сделок, не удалось выбрать сделку"+                   " с индексом %d. Ошибка %d",deals,deals-1,GetLastError());      }      //--- получим общее количество позиций    int positions=PositionsTotal(); //--- пробежим по списку ордеров    for(int i=0;i<positions;i++)      {       ResetLastError();       //--- скопируем в кэш позицию по ее номеру в списке       string symbol=PositionGetSymbol(i); //  попутно получим имя символа, по которому открыта позиция       if(symbol!="") // позицию скопировали в кэш, работаем с ней         {          long pos_id            =PositionGetInteger(POSITION_IDENTIFIER);          double price           =PositionGetDouble(POSITION_PRICE_OPEN);          ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);          long pos_magic         =PositionGetInteger(POSITION_MAGIC);          string comment         =PositionGetString(POSITION_COMMENT);          if(pos_magic==EA_Magic)            {          

 PositionModify(Symbol(),NormalizeDouble(( - StopLoss*_Point),4),                                 NormalizeDouble(( + TakeProfit*_Point),4)); //  ну здесь еще через запрос в зависимости от типа ордера

           }          PrintFormat("Позиция #%d по %s: POSITION_MAGIC=%d, цена=%G, тип=%s, комментарий=%s",                      pos_id,symbol,pos_magic,price,EnumToString(type),comment);         }       else           // вызов PositionGetSymbol() завершился неудачно         {          PrintFormat("Ошибка при получении в кэш позиции c индексом %d."+                      " Код ошибки: %d", i, GetLastError());         }      }


 
Top2n:

Messieurs, aidez-moi ! !! Déjà se décourager à la dernière étape, à partir d'une stratégie toute faite. On ne peut pas faire la moyenne d'un échange, par

J'essaie de faire une moyenne des échanges. Mais dans les paramètres.

Je ne peux pas déterminer le prix d'ouverture parce que j'obtiens le prix d'ouverture et je veux le prix qui a été déplacé à la suite du calcul de la moyenne.

Ou juste à travers l'historique des commandes pour connaître le prix de la première et de la deuxième commande et déjà sur la base de ces données pour faire la moyenne, je ne veux pas de cette façon c'est trop compliqué pour moi !

Vous devez d'abord élaborer un algorithme manuel de calcul de la moyenne. Vous avez maintenant une valeur négative du stoploss, et vous devriez avoir le prix réel du stoploss. Vous devez définir ces paramètres en fonction de votre algorithme de calcul de la moyenne.
 
La variable était de type extern, maintenant c'est input, mais c'est déjà une constante, extern n'est pas affiché dans le menu indicateur maintenant. Est-il possible de faire comme avant ou est-il nécessaire de créer des variables supplémentaires pour pouvoir modifier ces valeurs ?
 

Bonjour, veuillez clarifier une chose.

Par exemple, nous avons un EA avec l'événement OnTick, qui va ouvrir ou fermer une position en fonction des conditions. Vous pouvez tester l'EA dans le testeur de stratégie où vous pouvez définir l'horizon temporel. Je ne vois pas comment ils sont liés entre eux. L'EA n'est-il pas testé dans le Strategy Tester, et ne réagit-il pas à chaque tick ? Ou bien il ne réagit qu'à l'horizon temporel sélectionné dans le testeur de stratégie ? J'espère que cette question est claire