Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 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(),")");
               }

Bitte sagen Sie mir, warum ich im Strategietester keinen Stop-Loss und keinen Gewinn setze und nur eine Position zum Marktpreis eröffne?

Ich verwende CTrade (trade.Buy), um eine Position zu eröffnen.

Ich habe versucht, es mit (trade.PositionOpen) zu öffnen, die gleiche Sache, es öffnet und setzt Stops auf Demo, Stops sind 0 in der Strategy Tester, ich weiß nicht, was das Problem sein kann.

 
Hallo, liebe Programmierer. Ich denke, Programmierer sind wie Götter - etwas aus dem Nichts zu erschaffen, aus dem Nichts, und materielle Dinge zu erschaffen, ist einfach fantastisch... Ich habe einen Artikel über Zeit gelesen, aber da steht nichts darüber, wie man eine Periodizität festlegt, nicht einmal eine Periodizität, sondern das Aktivieren und Deaktivieren eines Expert Advisors zu bestimmten Zeiten. Ich weiß nicht, ob jemand diese Frage schon einmal gestellt hat. Ich muss meinen EA so umbenennen, dass er zu unterschiedlichen Zeiten startet und stoppt, aber da MT5 nur ein Paar - einen EA - hat, muss ich manuell zwischen ihnen wechseln. Danke
 
Top2n:

Ich weiß, dass ich es manuell machen kann, aber ich brauche einen Roboter, der das macht.

Wie erstelle ich eine Funktion zur Änderung eines Auftrags?

https://www.mql5.com/ru/articles/134
Как создать свой Trailing Stop
Как создать свой Trailing Stop
  • 2010.08.05
  • Dmitry Fedoseev
  • www.mql5.com
Основное правило трейдера - дай прибыли расти, обрезай убытки! В статье рассматривается один из основных технических приемов, позволяющий следовать этому правилу - перемещение уровня защитной остановки (уровня Stoploss) вслед за растущей прибылью позиции, другими словами - скользящий стоп или трейлинг стоп (trailingstop). Приводится пошаговая процедура создания класса для трейлинг стопа на индикаторах SAR и NRTR, который каждый желающий сможет за 5 минут встроить в своего эксперта или использовать независимо для управления позициями на своем счете.
 
Ich habe Trailing-Balken eingestellt, aber sie schalten sich nicht zum richtigen Zeitpunkt ein und aus, und sie berücksichtigen die Umkehrung nicht. Die Idee ist wie folgt: nach dem Trailing-Stop, in der Regel am Ende einer Periode, zum Beispiel eine Stunde oder 15 Minuten, warten Sie ein paar Minuten und lassen Sie es wieder einschalten und bestimmen Sie das Layout durch den Indikator und gehen Sie weiter zum nächsten Stop...:-))))
 
Hallo, könnten Sie mir sagen, ob es einen Unterschied für einen EA gibt: Mindesteinlage 1000& (Dollarkonto) oder 1000 Rubel (Rubelkonto)?
 
Pavel777:
Hallo, können Sie mir sagen, ob es einen Unterschied für einen EA gibt: eine Mindesteinzahlung von 1000& (Dollarkonto) oder 1000 Rubel (Rubelkonto)?
Es hängt alles vom Expert Advisor ab und nicht nur davon. Ich denke, das Wichtigste ist die Losgröße des EA.
 

Sehr geehrte Damen und Herren, helfen Sie mir!!! Sie werden schon beim letzten Schritt entmutigt, von einer vorgefertigten Strategie. Kann keinen durchschnittlichen Handel, durch

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

Ich versuche, einen Durchschnittswert zu ermitteln. Aber in den Parametern.

PositionModify(Symbol,SL,ТР)

Ich kann den Eröffnungskurs nicht ermitteln, weil ich den Eröffnungskurs erhalte und den Kurs haben möchte, der durch die Mittelwertbildung verschoben wurde.

Oder einfach über die Bestellhistorie den Preis der ersten und zweiten Bestellung herausfinden und schon auf Basis dieser Daten gemittelt werden, diesen Weg will ich nicht, das ist mir zu kompliziert!

 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:

Sehr geehrte Damen und Herren, helfen Sie mir!!! Sie werden schon beim letzten Schritt entmutigt, von einer vorgefertigten Strategie. Kann keinen durchschnittlichen Handel, durch

Ich versuche, einen Durchschnittswert zu ermitteln. Aber in den Parametern.

Ich kann den Eröffnungskurs nicht ermitteln, weil ich den Eröffnungskurs erhalte und den Kurs haben möchte, der durch die Mittelwertbildung verschoben wurde.

Oder einfach über die Bestellhistorie den Preis der ersten und zweiten Bestellung herausfinden und schon auf Basis dieser Daten gemittelt werden, diesen Weg will ich nicht, das ist mir zu kompliziert!

Sie sollten zunächst einen manuellen Mittelungsalgorithmus erstellen. Jetzt haben Sie einen negativen Wert für den Stop-Loss, und Sie sollten den tatsächlichen Stop-Loss-Kurs haben. Sie sollten diese Parameter entsprechend Ihrem Mittelungsalgorithmus einstellen.
 
Die Variable war früher vom Typ extern, jetzt ist sie input, aber sie ist bereits eine Konstante, extern wird jetzt nicht im Indikatormenü angezeigt. Ist es möglich, so zu verfahren wie bisher, oder müssen zusätzliche Variablen erstellt werden, um diese Werte ändern zu können?
 

Hallo, bitte klären Sie eine Sache.

Wir haben zum Beispiel einen EA mit dem OnTick-Ereignis, der je nach den Bedingungen eine Position öffnet oder schließt. Sie können den EA im Strategietester testen, wo Sie den Zeitrahmen einstellen können. Ich sehe nicht, wie sie miteinander verknüpft sind. Wird der EA nicht im Strategietester getestet und reagiert er auf jeden Tick? Oder reagiert er nur auf den ausgewählten Zeitrahmen im Strategietester? Ich hoffe, diese Frage ist klar

Grund der Beschwerde: