"ダミー "からの質問 - ページ 5

 

ストップロスの大きさを200pipsに変更するスクリプトを作ったのですが、ストップが移動しない代わりにエラーが発生します

//+------------------------------------------------------------------+
//|                                                      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);
                    }
                 }
              }
           }  
  }
//+------------------------------------------------------------------+
 
何が間違いなのか?
 
Khomtchenko:

ストップロスの大きさを200pipsに変更するスクリプトを作ったのですが、ストップが移動しない代わりにエラーが発生します

pipsではどこにでもあるslが、プライスでは必要なんですね。
 
了解です。試してみます。
 

これです。簡略化し、スクリプトが行おうとしているSLとTPについてのメッセージを追加しました。ストップ高はすでに価格

//+------------------------------------------------------------------+
//|                                                      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");
                  
                 
              }
            }
  }
//+------------------------------------------------------------------+

しかし、何も起こらない。

 

皆さん、こんにちは。このシステムのExpert Advisorがあるかどうか教えてください。

流行に乗る」ということだと思います。

- 終値が直近20本中の最大値 より高い場合、ロングポジションを建てます。

- 終値が過去 10 バーの最低価格を下回る場合、ロングポジションを決済します。

- 終値が直近の20本のバーの最小値より小さい場合、ショートポジションをクローズします。

- 終値が直近の10本バーより上にある場合、ショートポジションをクローズする。

あるいは、親切な人が書くのを手伝ってくれるかもしれない?

 
papaklass:

停止を変更するには、クエリに特定のフィールドを含める必要があります。

このような依頼を受けたら、ここでストップが変わるはずです。

でも、新しいストップはなぜ滑る必要があるんでしょうね?
 

質問があるのですが、そのために別スレッドを作ることにしたわけではありません。 作者が気分を害することなく、質問が迷子にならないことを祈ります。

質問は売買シグナルモジュールについて です。https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal、MACDシグナルの説明を例にとると、「発散 -最初に分析されたオシレーターの谷が前のものよりも浅く、対応する価格の谷が前のものよりも 深い」 - このシグナルを探す方法を見るのは興味深いです。 SignalMACD.mqh を開いてみると、代わりにIS_PATTERN_USAGE(0) 条件などが存在するのです。

ダイバージェンスそのものをどのように探すのか、そのコードを見るにはどうすればいいのでしょうか?つまり、あるバーのローソク足と他のインジケータの比較はどのように見えるのか、このコードはどこにあるのでしょうか。

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

実際のアカウントでは、シンボル名に「.」や「FXF」など、さまざまなプレフィックスを付与しているDCもあります。

これらの接頭辞はどのように使えばよいのでしょうか?

私はこのようにしました。

#define DEF_SPEC "FXF"

string SymbolsTrade[] = {"AUDCAD "DEF_SPEC ...-動作しない

string SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ...-そんなこともない

その結果、AUDCADFXFの代わりにFXFが表示されるようになりました。

どうすればいいか教えてください。

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

質問があるのですが、作者の方が気を悪くされず、質問がなくならないことを願っています。

質問は売買シグナルモジュールについて です。https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal、MACDシグナルの説明を例にとると、「発散 -最初に分析されたオシレーターの谷が前のものよりも浅く、対応する価格の谷が前のものよりも 深い」 - このシグナルがどのように探されているのかコードを見ると面白いです。 SignalMACD.mqh を開いてみると、代わりにIS_PATTERN_USAGE(0) 条件などが存在します。

ダイバージェンスそのものをどのように探すのか、そのコードを見るにはどうすればいいのでしょうか?つまり、あるバーのローソク足と他のインジケータの比較はどのように見えるのか、このコードはどこにあるのでしょうか。

ソースコードで確認することができます。ダイバージェンスの検索には2つの方法があります。

1.bool CSignalMACD::ExtState(int ind) メソッド - 検索用のデータを準備する。

2.bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start) メソッドは、指定されたパラメータで市場モデルを検索します。

参考までに、ロシア語で書かれたメソッドのコメントをご紹介します。

bool CSignalMACD::ExtState(int ind)メソッドの場合。

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

メソッド 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 если мы хотим "найти" ситуацию когда текущий экстремум цены менее "экстремальный" чем предыдущий
//---         (текущий пик менее высокий или текущая впадина менее глубокая)