Fragen von einem "Dummy" - Seite 5

 

Ich habe ein Skript erstellt, das die Größe des Stop-Loss auf 200 Pips ändert, aber es gibt einen Fehler, anstatt den Stop zu verschieben

//+------------------------------------------------------------------+
//|                                                      traling.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
double BuyStoploss=200;
double SellStoploss=200;
double sl,tp;
void OnStart()
  {
//---
MqlTradeRequest m_request;
MqlTradeResult m_result;
 if(PositionSelect(_Symbol))
           {
            //--- если позиция buy
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
              {
               //--- получаем значение стоплосс для позиции buy
               sl=BuyStoploss;
               //--- определяем допустимый уровень установки стоплосс для позиции buy
               double minimal=SymbolInfoDouble(_Symbol,SYMBOL_BID)-_Point*SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
               //--- нормализация значения
               sl=NormalizeDouble(sl,_Digits);
               //--- нормализация значения
               minimal=NormalizeDouble(minimal,_Digits);
               //--- если на полученный от индикатора уровень невозможно установить стоплосс, 
               //    он будет установлен на ближайший возможный уровень
               sl=MathMin(sl,minimal);
               //--- значение стоплосс позиции
               double possl=PositionGetDouble(POSITION_SL);
               //--- нормализация значения
               possl=NormalizeDouble(possl,_Digits);
               //--- если новое значение стоплосс выше, чем текущее значение стоплосс, 
               //    будет выполнена попытка переместить стоплосс на новый уровень
               if(sl>possl|| possl==0)
                 {
                  //--- заполнение структуры запроса
                  m_request.sl=sl;
                  //--- заполнение структуры запроса
                  m_request.tp=PositionGetDouble(POSITION_TP);
                  //--- запрос
                  OrderSend(m_request,m_result);
                  //--- проверка результата выполнения запроса
                  if(m_result.retcode!=TRADE_RETCODE_DONE)
                    {
                     //--- вывод в журнал сообщения об ошибке 
                     printf("Не удалось переместить стоплосс позиции %s, ошибка: %I64u",_Symbol,m_result.retcode);
                     //--- не удалось переместить стоплосс, завершаем выполнение
                     //return(false);
                    }
                 }
              }
           
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
              {
               sl=SellStoploss;
               //--- прибавляется спред, поскольку sell закрывается по цене Ask
               sl+=(SymbolInfoDouble(_Symbol,SYMBOL_ASK)-SymbolInfoDouble(_Symbol,SYMBOL_BID));
               double minimal=SymbolInfoDouble(_Symbol,SYMBOL_ASK)+_Point*SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
               sl=NormalizeDouble(sl,_Digits);
               minimal=NormalizeDouble(minimal,_Digits);
               sl=MathMax(sl,minimal);
               double possl=PositionGetDouble(POSITION_SL);
               possl=NormalizeDouble(possl,_Digits);
               if(sl<possl || possl==0)
                 {
                  m_request.sl=sl;
                  m_request.tp=PositionGetDouble(POSITION_TP);
                  OrderSend(m_request,m_result);
                  if(m_result.retcode!=TRADE_RETCODE_DONE)
                    {
                     printf("Не удалось переместить стоплосс позиции %s, ошибка: %I64u",_Symbol,m_result.retcode);
                     //return(false);
                    }
                 }
              }
           }  
  }
//+------------------------------------------------------------------+
 
Wo liegt der Fehler?
 
Khomtchenko:

Ich habe ein Skript erstellt, das die Größe des Stop-Loss auf 200 Pips ändert, aber es gibt einen Fehler, anstatt den Stop zu verschieben

Sie haben überall Slips in Pips und Sie brauchen sie in Preisen.
 
Ich hab's. Ich werde es ausprobieren.
 

Hier. Vereinfacht und eine Meldung hinzugefügt, was SL und TP das Skript zu tun versucht. Die Stops sind bereits in den Preisen enthalten

//+------------------------------------------------------------------+
//|                                                      traling.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
double Stoploss=0.00200;
double TP=0.01200;
double sl,tp;
double ask; 
double bid; 
void OnStart()
  {
//---
MqlTradeRequest m_request;
MqlTradeResult m_result;
MqlTick last_tick;
 SymbolInfoTick(_Symbol,last_tick);
 ask=last_tick.ask;
 bid=last_tick.bid;
 if(PositionSelect(_Symbol))
           {
            //--- если позиция buy
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
              {
                  sl=ask-Stoploss;
                  NormalizeDouble(sl,_Digits);
                  m_request.sl=sl;
                  tp=ask+TP;
                  NormalizeDouble(tp,_Digits);
                  //sl=ask-sl;
                  m_request.tp=tp;
                  Alert("SL=",sl," TP=",tp);
                  if (OrderSend(m_request,m_result)) Alert("ok");
                  
                 }
              
           
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
              {
               sl=bid+Stoploss;
               NormalizeDouble(sl,_Digits);
                  m_request.sl=sl;
                  tp=bid-TP;
                  NormalizeDouble(tp,_Digits);
                  m_request.tp=tp;
                  Alert("SL=",sl," TP=",tp);
                  if (OrderSend(m_request,m_result)) Alert("ok");
                  
                 
              }
            }
  }
//+------------------------------------------------------------------+

Aber es passiert nichts.

 

Hallo zusammen. Können Sie mir bitte sagen, ob es einen Expert Advisor für dieses System gibt?

Ich glaube, das nennt man "dem Trend folgen".

- Eine Long-Position wird eröffnet, wenn der Schlusskurs höher ist als der Höchstkurs der letzten 20 Bars;

- eine Long-Position schließen, wenn der Schlusskurs unter dem Mindestkurs der letzten 10 Bars liegt;

- eine Short-Position schließen, wenn der Schlusskurs unter dem Mindestkurs der letzten 20 Bars liegt; eine Short-Position schließen, wenn der Schlusskurs unter dem Mindestkurs der letzten 10 Bars liegt

- eine Short-Position schließen, wenn der Schlusskurs über dem letzten 10er-Balken liegt; eine Short-Position schließen, wenn der Schlusskurs über dem letzten 10er-Balken liegt.

Oder vielleicht können nette Leute Ihnen beim Schreiben helfen?

 
papaklass:

Um Haltestellen zu ändern, müssen Sie bestimmte Felder in die Abfrage aufnehmen:

Hier sollte Ihre Haltestelle nach einer solchen Aufforderung geändert werden.

Aber ich frage mich, warum die neuen Haltestellen rutschen müssen?
 

Ich habe eine Frage, für die ich keinen separaten Thread erstellen möchte, weil ich hoffe, dass der Autor nicht beleidigt ist und die Frage nicht verloren geht.

Die Frage bezieht sich auf die Handelssignalmodule - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal und nehmen wir zum Beispiel die Beschreibung der MACD-Signale"Divergence - the first analysed oscillator trough is shallower than the previous one and the corresponding price trough is deeper than the previous one" - es ist interessant, sich den Code anzuschauen, wie dieses Signal gesucht wird. Wir öffnen SignalMACD.mqh, aber es gibt stattdessen IS_PATTERN_USAGE(0) -Bedingungen und so weiter.

Wie kann ich den Code für die Suche nach der Divergenz selbst sehen? Das heißt, wie vergleicht er eine Kerze mit einem anderen Indikator auf einem Balken zu einem anderen, wo ist dieser Code?

Документация по MQL5: Стандартная библиотека / Классы торговых стратегий / Модули торговых сигналов
Документация по MQL5: Стандартная библиотека / Классы торговых стратегий / Модули торговых сигналов
  • www.mql5.com
Стандартная библиотека / Классы торговых стратегий / Модули торговых сигналов - Документация по MQL5
 

Einige DCs in echten Konten weisen den Symbolnamen alle möglichen Präfixe wie "." oder "FXF" zu.

Wie kann ich diese Präfixe verwenden?

Ich habe es so gemacht:

#define DEF_SPEC "FXF"

string SymbolsTrade[] = {"AUDCAD "DEF_SPEC ... -funktioniert nicht

string SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ... -auch das funktioniert so nicht

als Ergebnis erhalte ich nur FXF anstelle von AUDCADFXF.

Können Sie mir sagen, wie man das macht?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
 
T-G:

Ich habe eine Frage, und ich hoffe, dass der Autor nicht beleidigt ist und die Frage nicht verloren geht.

Die Frage bezieht sich auf die Handelssignalmodule - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal und nehmen wir zum Beispiel die Beschreibung der MACD-Signale"Divergence - the first analysed oscillator trough is shallower than the previous one and the corresponding price trough is deeper than the previous one" - es ist interessant, sich den Code anzuschauen, wie dieses Signal gesucht wird. Wir öffnen SignalMACD.mqh, aber es gibt stattdessen IS_PATTERN_USAGE(0) -Bedingungen und so weiter.

Wie kann ich den Code für die Suche nach der Divergenz selbst sehen? Das heißt, wie sieht der Vergleich einer Kerze mit einem anderen Indikator auf einem Balken auf dem anderen aus, wo ist dieser Code?

Sie können den Code im Quellcode einsehen. Für die Suche nach der Divergenz gibt es zwei Methoden:

1. Die Methode bool CSignalMACD::ExtState(int ind) - sie bereitet Daten für die Suche vor;

2. Die Methode bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start) sucht nach einem Marktmodell mit den angegebenen Parametern.

Wenn es hilft, hier sind Kommentare zu den Methoden auf Russisch:

Für die Methode bool CSignalMACD::ExtState(int ind)

//--- результатом работы этого метода является битовая карта экстремумов
//--- фактически, битовая карта экстремумов представляет собой "массив" 4-битовых полей
//--- каждый "элемент массива" однозначно описывает соотношение
//--- текущих экстремумов осцилятора и цены с предыдущими
//--- назначение битов элемента анализируемой битовой карты
//--- бит 3 - не используется (всегда 0)
//--- бит 2 - имеет значение 1 если текущий экстремум осцилятора "экстремальней" предыдущего
//---         (более высокий пик или более глубокая впадина), иначе 0
//--- бит 1 - не используется (всегда 0)
//--- бит 0 - имеет значение 1 если текущий экстремум цены "экстремальней" предыдущего
//---         (более высокий пик или более глубокая впадина), иначе 0
//--- кроме того, формируются:
//--- массив значений экстремумов осцилятора,
//--- массив значений экстремумов цены и
//--- массив "расстояний" между экстремумами осцилятора (в барах)
//--- следует отметить, что при использовании результатов расширенной проверки состояния,
//--- нужно учитывать, какой экстремум осцилятора (пик или впадина)
//--- является "точкой отсчёта" (т.е. был обнаружен при анализе первым)
//--- если первым был обнаружен пик, то чётные элементы всех массивов
//--- будут содержать данные о пиках, нечётный данные о впадинах
//--- если первой была обнаружена впадина, соответственно, наоборот

Für die Methode bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start)

//--- битовая карта образца представляет собой "массив" 4-битовых полей
//--- каждый "элемент массива" однозначно описывает искомое соотношение
//--- текущих экстремумов осцилятора и цены с предыдущими
//--- назначение битов элемента образца битовой карты
//--- бит 3 - имеет значение 1 если нам неважно соотношение экстремумов осцилятора
//---         имеет значение 0 если мы хотим "найти" соотношение экстремумов осцилятора определённое значением бита 2
//--- бит 2 - имеет значение 1 если мы хотим "найти" ситуацию когда текущий экстремум осцилятора "экстремальней" предыдущего
//---         (текущий пик более высокий или текущая впадина более глубокая)
//---         имеет значение 0 если мы хотим "найти" ситуацию когда текущий экстремум осцилятора менее "экстремальный" чем предыдущий
//---         (текущий пик менее высокий или текущая впадина менее глубокая)
//--- бит 1 - имеет значение 1 если нам неважно соотношение экстремумов цены
//---         имеет значение 0 если мы хотим "найти" соотношение экстремумов цены определённое значением бита 0
//--- бит 0 - имеет значение 1 если мы хотим "найти" ситуацию когда текущий экстремум цены "экстремальней" предыдущего
//---         (текущий пик более высокий или текущая впадина более глубокая)
//---         имеет значение 0 если мы хотим "найти" ситуацию когда текущий экстремум цены менее "экстремальный" чем предыдущий
//---         (текущий пик менее высокий или текущая впадина менее глубокая)