Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 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(),")");
               }

Per favore ditemi, perché nel tester di strategia non imposto stop loss e profitto e apro solo la posizione al prezzo di mercato?

Sto usando CTrade (trade.Buy) per aprire una posizione.

Ho provato ad aprirlo con (trade.PositionOpen), la stessa cosa, si apre e mette stop su demo, gli stop sono 0 nello Strategy Tester, non so quale possa essere il problema.

 
Salve, cari programmatori. Penso che i programmatori siano come degli dei - creare qualcosa che funziona dal nulla, dal nulla e creare cose materiali è semplicemente fantastico... Ho letto un articolo sul tempo, ma non dice nulla sull'impostare una periodicità, nemmeno la periodicità, ma l'attivazione e la disattivazione di un Expert Advisor in determinati momenti. Non so se qualcuno ha mai fatto questa domanda. Devo rinominare il mio EA per avviare e fermare in momenti diversi, ma poiché MT5 ha solo una coppia - un EA, devo passare da uno all'altro manualmente. Grazie
 
Top2n:

Capisco che posso farlo manualmente, ma ho bisogno di un robot per farlo.

Come posso creare una funzione per modificare un ordine?

https://www.mql5.com/ru/articles/134
Как создать свой Trailing Stop
Как создать свой Trailing Stop
  • 2010.08.05
  • Dmitry Fedoseev
  • www.mql5.com
Основное правило трейдера - дай прибыли расти, обрезай убытки! В статье рассматривается один из основных технических приемов, позволяющий следовать этому правилу - перемещение уровня защитной остановки (уровня Stoploss) вслед за растущей прибылью позиции, другими словами - скользящий стоп или трейлинг стоп (trailingstop). Приводится пошаговая процедура создания класса для трейлинг стопа на индикаторах SAR и NRTR, который каждый желающий сможет за 5 минут встроить в своего эксперта или использовать независимо для управления позициями на своем счете.
 
Ho impostato le trailing bar, ma non si attivano e disattivano al momento giusto, e non tengono conto dell'inversione. L'idea è la seguente: dopo il trailing stop, di solito alla fine di un periodo, per esempio un'ora o 15 minuti, aspettare qualche minuto e lasciare che si riaccenda e determinare il layout dall'indicatore e passare allo stop successivo...:-))))
 
Ciao, potresti dirmi se c'è una differenza per un EA: deposito minimo 1000& (conto in dollari) o 1000 rubli (conto in rubli)?
 
Pavel777:
Ciao, puoi dirmi se c'è una differenza per un EA: un deposito minimo di 1000& (conto in dollari) o 1000 rubli (conto in rubli)?
Tutto dipende dall'Expert Advisor e non solo. Penso che la cosa principale sia la dimensione del lotto dell'EA.
 

Cari signori, aiutatemi!!! Già scoraggiarsi all'ultimo passo, da una strategia già pronta. Non può fare la media di uno scambio, attraverso

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

Sto cercando di fare la media di uno scambio. Ma nei parametri.

PositionModify(Symbol,SL,ТР)

Non posso determinare il prezzo di apertura perché ottengo il prezzo di apertura e voglio il prezzo che è stato spostato come risultato della media.

O solo attraverso la cronologia degli ordini per scoprire il prezzo del primo e del secondo ordine e già sulla base di questi dati per essere mediato, non voglio questo modo è troppo complicato per me!

 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:

Cari signori, aiutatemi!!! Già scoraggiarsi all'ultimo passo, da una strategia già pronta. Non può fare la media di uno scambio, attraverso

Cercando di fare la media di uno scambio. Ma nei parametri.

Non posso determinare il prezzo di apertura perché ottengo il prezzo di apertura e voglio il prezzo che è stato spostato come risultato della media.

Oppure solo attraverso la cronologia degli ordini per scoprire il prezzo del primo e del secondo ordine e già sulla base di questi dati per essere mediato, non voglio questo modo è troppo complicato per me!

Dovresti prima elaborare un algoritmo di mediazione manuale. Ora avete un valore negativo di stoploss, e dovreste avere il prezzo effettivo di stoploss. Dovresti impostare questi parametri secondo il tuo algoritmo di mediazione.
 
La variabile era di tipo extern, ora è input, ma è già una costante, extern non viene visualizzato nel menu indicatore ora. È possibile fare come prima o è necessario creare variabili aggiuntive per poter cambiare questi valori?
 

Ciao, per favore chiarisci una cosa.

Per esempio, abbiamo un EA con l'evento OnTick, che aprirà o chiuderà una posizione a seconda delle condizioni. Puoi testare l'EA nel tester di strategia dove puoi impostare il timeframe. Non vedo come siano collegati. L'EA non è testato nello Strategy Tester, dove reagisce ad ogni tick? O reagisce solo al timeframe selezionato nello Strategy Tester? Spero che questa domanda sia chiara

Motivazione: