MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1466

 
WindUP:
ありがとうございます。でも、客観的な例をひとつくらい教えてください。いわば上からの目線。私は全くの素人で、2日前からこの話題で盛り上がっています :-)

たぶんこんな感じ

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits      = 1;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots        = 0.01; // Lots
//---
sinput int    Inpcopiedrates = 2;    // какой бар
sinput double Inplow         = 100;  // отступить от low
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,10,rates);
   double sl=rates[Inpcopiedrates].low-Inplow/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
 
SanAlex:

私も勉強しようと思っているのですが......なんとなくわかってきたような気がします。

こんにちは。申し訳ありませんが、私はあなたが成功したことをスクリーンショットで見るが、私は前のろうそくのデータをコピーする機能は、このコードのどこにあるのかわかりませんでした[1]?




MQL5プログラミングコースを教えてください。簡単なものから複雑なものまで、どこから、何を使って始めるのが良いのか、より多くの結果を得るために、無駄な時間を減らすために教えてください。ありがたいことです :-)

 
WindUP:

こんにちは。申し訳ありませんが、私はあなたが成功したことをスクリーンショットで見るが、ここで私はこのコードで前のキャンドル[1]のデータをコピーの関数である場所を見ませんでしたか?




簡単なものから複雑なものまで、どこから、何を使って始めるのが良いのか、より多くの結果を得るために、そして無駄な時間を減らすために、ダミーのためのMQL5プログラミングコースをどのように伝えれば良いのでしょうか?ありがたいことです :-)

友人が「インターネットの仕事の仕方を教えてほしい」と近づいてきたとします。何を教えるかイメージするのは難しいですか?プログラミングを教えるのが難しいのと同じです。課題がある-解決策がある。でも、それと同じで...どんな言語でも基本は同じだから、勉強すればいいんです。プログラミングは、コードを書くというより、問題を設定し、その解決のためのアルゴリズムを書き、初めてコードを書くというものです。そして最終段階、デバッグと結果のチェック。

SanAlrxのコードでは、最初のローソク足だけのOHLCを取得するという特定のタスクがあるのに、なぜこのようにコピーしたデータのストックを作らなければならないのかが理解できません。

int copied=CopyRates(Symbol(),0,0,10,rates);

と、なぜ今開いたばかりのローソクの値をコピーするのか。でも...これは彼が決めたことであり、彼のゴキブリのことです。

 
WindUP:

こんにちは。申し訳ありませんが、私はあなたが成功したことをスクリーンショットで見るが、ここで私はこのコードで前のキャンドル[1]のデータをコピーする関数がある場所を見ませんでしたか?




簡単なものから複雑なものまで、どこから、何を使って始めるのが良いのか、より多くの結果を得るために、そして無駄な時間を減らすために、ダミーのためのMQL5プログラミングコースをどのように伝えれば良いのでしょうか?ありがたいことです :-)

例えば、https://www.mql5.com/ru/docs/series/copyrates、 スクリプトの例があって、それを自分のPCに保存して、直感で読み始めて、詳細を詰めていく。

と、直感で見つけたのがこの機能です。

//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,10,rates);
   double sl=rates[Inpcopiedrates].low-Inplow/100;

BUY「SL」用です。

販売する場合 このようになります。

   double sl=rates[Inpcopiedrates].high+Inphigh/100;

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

ここに数字を入れただけですが、10本までなら購入可能でしょう。でも、必要ないんですよね、1(ワン)。

   int copied=CopyRates(Symbol(),0,0,10,rates);
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
CopyRates - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
WindUP:

こんにちは。申し訳ありませんが、私はあなたが成功したことをスクリーンショットで見るが、ここで私はこのコードで前のキャンドル[1]のデータをコピーの関数である場所を見ませんでしたか?




シンプルなものから複雑なものまで、どこから、何を使って始めるのが良いのか、より多くの結果を得るために、そして無駄な時間を減らすために、ダミーのためのMQL5プログラミングコースをどのように伝えれば良いのでしょうか?ありがたいことです :-)

ここに良い例があります。ちょうどそのページに行きましたが、これがどのように機能するかを伝えるためのより良いスクリプトです。https://www.mql5.com/ru/docs/constants/objectconstants/enum_anchorpoint。

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Способы привязки объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Способы привязки объектов
  • www.mql5.com
Способы привязки объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
SanAlex:

私自身も勉強中です。例えば、ドキュメントhttps://www.mql5.com/ru/docs/series/copyrates を見てみると、サンプルスクリプトがあり、それをパソコンに保存して、手探りで読み始め、細部を探っていくのです。

と、直感で見つけたのがこの機能です。

BUY「SL」用です。

販売する場合 このようになります。

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

ここに数字を入れただけですが、10本までなら購入可能でしょう。しかし、必要ないのは1(ワン)。

これは、BUYとSELLのSLを開き、設定します。

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits      = 1;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots        = 0.01; // Lots
//---
sinput double Inplowhigh     = 100;  // отступить low high
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   OnStartBuy();
   OnStartSell();
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStartBuy()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,2,rates);
   if(copied<=0)
     {
      Print("Не удалось получить исторические данные. Error = ",GetLastError());
      return;
     }
   double sl=rates[1].low-Inplowhigh/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStartSell()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_BID);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,2,rates);
   if(copied<=0)
     {
      Print("Не удалось получить исторические данные. Error = ",GetLastError());
      return;
     }
   double sl=rates[1].high+Inplowhigh/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening SELL position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+

撮影者

 

こんにちは。

ヒントをください、お手上げです。

私はiCustomを通してインジケータを処方し、問題に直面して - インジケータは、選択肢とテキストメニューを持って、それが開き、いくつかの項目が処方されている、まあ、私はそれが明確だと思います)。

メニューに追加するにはどうしたらよいですか?

extern int HIT = 0; は動作せず、パラメータが表示されないまま表示が停止します。

おそらくENUMを通じて、そこに選択するもの、または多分何か他のもの?

ありがとうございました。

ファイル:
 
Сергей:

こんにちは。

ヒントをください、お手上げです。

私はiCustomを通してインジケータを処方し、問題に直面して - インジケータは、選択肢とテキストメニューを持って、それが開き、いくつかの項目が処方されている、まあ、私はそれが明確だと思います)。

メニューに追加するにはどうしたらよいですか?

extern int HIT = 0; は動作せず、パラメータが表示されないまま表示が停止します。

おそらくENUMを通じて、そこに選択するもの、または多分何か他のもの?

ありがとうございました。

空の文字列 "" またはスペース "" を入れてください。

 

だから、なんとか処方して、設定を変えられるようにしたかったんです。

一組ずつ違うアイテムを持っているのですが、どのように選択すればいいのでしょうか?

また、そのメニューがなければ意味がなく、スクリーンショットはあくまで似たようなものの一例です。

 
Сергей:

だから、なんとか処方して、設定を変えられるようにしたかったんです。

一組ずつ違うアイテムを持っているのですが、どのように選択すればいいのでしょうか?

また、そのメニューがなければ意味がなく、スクリーンショットはあくまで似たようなものの一例です。

不注意で申し訳ありません。インジケータは、列挙を有する。そしてExpert Advisorでは、入力パラメータにこの列挙型の名前を変数型として指定する必要があります。

とはいえ、試していないので...おそらく、この列挙をEAで繰り返すか、 ENUM_BASE_CORNER 変数の型だけ設定することになると思います

理由: