Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 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(),")");
               }

Por favor, díganme, ¿por qué en el probador de estrategias no establezco el stop loss y el profit y sólo abro la posición a precio de mercado?

Estoy usando CTrade (trade.Buy) para abrir una posición.

He intentado abrirlo con (trade.PositionOpen), lo mismo, se abre y pone stops en demo, los stops son 0 en el Probador de Estrategias, no sé cuál puede ser el problema.

 
Hola, queridos programadores. Creo que los programadores son como dioses - crear algo que funcione de la nada, de la nada y crear cosas materiales es simplemente fantástico... Leí un artículo sobre el tiempo, pero no dice nada sobre establecer una periodicidad, ni siquiera periodicidad, sino habilitar y deshabilitar un Asesor Experto en ciertos momentos. No sé si alguien se lo ha preguntado alguna vez. Tengo que cambiar el nombre de mi EA para que se inicie y se detenga en diferentes momentos, pero como MT5 sólo tiene un par - un EA, tengo que cambiar entre ellos manualmente. Gracias
 
Top2n:

Entiendo que puedo hacerlo manualmente, pero necesito un robot para hacerlo.

¿Cómo puedo crear una función para modificar un pedido?

https://www.mql5.com/ru/articles/134
Как создать свой Trailing Stop
Как создать свой Trailing Stop
  • 2010.08.05
  • Dmitry Fedoseev
  • www.mql5.com
Основное правило трейдера - дай прибыли расти, обрезай убытки! В статье рассматривается один из основных технических приемов, позволяющий следовать этому правилу - перемещение уровня защитной остановки (уровня Stoploss) вслед за растущей прибылью позиции, другими словами - скользящий стоп или трейлинг стоп (trailingstop). Приводится пошаговая процедура создания класса для трейлинг стопа на индикаторах SAR и NRTR, который каждый желающий сможет за 5 минут встроить в своего эксперта или использовать независимо для управления позициями на своем счете.
 
He puesto barras de seguimiento, pero no se activan y desactivan en el momento adecuado, y no tienen en cuenta la inversión. La idea es la siguiente: después del trailing stop, normalmente al final de un periodo, por ejemplo una hora o 15 minutos, esperar unos minutos y dejar que se encienda de nuevo y determinar la disposición por el indicador y pasar al siguiente stop...:-))))
 
Hola, ¿podríais decirme si hay alguna diferencia para un EA: depósito mínimo 1000& (cuenta en dólares) o 1000rublos (cuenta en rublos)?
 
Pavel777:
Hola, ¿puede decirme si hay alguna diferencia para un EA: un depósito mínimo de 1000& (cuenta en dólares) o 1000rublos (cuenta en rublos)?
Todo depende del Asesor Experto y no sólo. Creo que lo principal es el tamaño del lote del EA.
 

Estimados señores, ¡¡¡ayúdenme!!! Ya se está desanimando en el último paso, a partir de una estrategia preparada. No se puede promediar un comercio, a través de

 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 );
  }

Tratando de promediar un comercio. Pero en los parámetros.

PositionModify(Symbol,SL,ТР)

No puedo determinar el precio de apertura porque obtengo el precio de apertura y quiero el precio que se desplazó como resultado del promedio.

¡O simplemente a través del historial de pedidos averiguar el precio del primer y segundo pedido y ya en base a estos datos hacer la media, no quiero de esta manera es demasiado complicado para mí!

 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:

Estimados señores, ¡¡¡ayúdenme!!! Ya se está desanimando en el último paso, a partir de una estrategia preparada. No se puede promediar un comercio, a través de

Estoy tratando de promediar un intercambio. Pero en los parámetros.

No puedo determinar el precio de apertura porque obtengo el precio de apertura y quiero el precio que se desplazó como resultado del promedio.

¡O simplemente a través del historial de pedidos averiguar el precio del primer y segundo pedido y ya en base a estos datos hacer la media, no quiero de esta manera es demasiado complicado para mí!

Primero deberías elaborar un algoritmo de promediación manual. Ahora tiene un valor negativo de stoploss, y debería tener el precio real de stoploss. Deberá ajustar estos parámetros en función de su algoritmo de promediación.
 
La variable antes era de tipo extern, ahora es input, pero ya es una constante, ahora extern no aparece en el menú de indicadores. ¿Se puede hacer como antes o es necesario crear variables adicionales para poder cambiar estos valores?
 

Hola, por favor, aclare una cosa.

Por ejemplo, tenemos un EA con el evento OnTick, que abrirá o cerrará una posición dependiendo de las condiciones. Puede probar el EA en el probador de estrategias donde puede establecer el marco de tiempo. No veo cómo están interrelacionados. ¿No es el EA probado en el Probador de Estrategias, y reacciona a cada tick? ¿O sólo reacciona al marco temporal seleccionado en el Probador de Estrategias? Espero que esta pregunta sea clara

Razón de la queja: