MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 950 1...943944945946947948949950951952953954955956957...1953 新しいコメント Yevhenii Levchenko 2019.08.30 21:48 #9491 Rustam Bikbulatov:この関数は、各注文の番号というか、ロット*100を書き込む。ここで、最後の数字が何であったかを示す逆関数が必要である。 試してみてください。 double value = StringToDouble(ObjectGetString(0,object_name,OBJPROP_TEXT)); オブジェクトがテキストを含む場合(数値ではない)、StringSubstr() を追加する必要があります。 double value = StringToDouble( StringSubstr(ObjectGetString(0,object_name,OBJPROP_TEXT),begin_index,length)); begin_index - 文字列中の0から始まるインデックス, length - 数値の長さ(数値が何文字を占めるか)....だろう Rustam Bikbulatov 2019.08.30 21:56 #9492 Yevhenii Levchenko: これを試してみてください。 オブジェクトがテキストを持つ場合(数値ではない)、StringSubstr()を追加する。 begin_index - 文字列中の文字のインデックス,0から始まる, length - 数値の長さ(数値が何文字を占めるか).だろう まあ、最初はこのすべての数字をグラフで探さなければならないのですが。ただ、そううまくはいきません。それが問題なのです。 すでにチェック済みです。 Rustam Bikbulatov 2019.08.30 21:59 #9493 Yevhenii Levchenko: これを試してみてください。 オブジェクトが(数値でなく)テキストを持つ場合、StringSubstr()を追加する。 begin_index - 文字列中の0から始まるインデックス, length - 数値の長さ(数値が何文字を占めるか)....だろう bool name; for(int i=0; i<ObjectsTotal(0,"LOTB"+OrderTicket(),OBJ_TEXT); i++) { name = ObjectSetString(0,"LOTB"+OrderTicket(),OBJ_TEXT,0); Comment(" ",name); } これと似たようなものですが、うまくいきません。 ゼロと表示されます。 Yevhenii Levchenko 2019.08.30 22:21 #9494 Rustam Bikbulatov: これと同じですが、うまくいきません。 ゼロと表示されます。 値を設定するか、値を取るか?ObjectSetString()関数は、テキスト 値を設定 し、bool 値を返します。これは違うんです。そして、ループの頭の中がおかしいと思うのですが、ObjectsTotal()のところ...。mt4参考にさせてもらってます。それともmt5コード? Rustam Bikbulatov 2019.08.31 07:10 #9495 Yevhenii Levchenko: 値を設定する必要があるのか、値を取る必要があるのか?ObjectSetString()関数は、テキスト 値を設定 し、bool 値を返します。これは違うんです。そして、ループの先頭がおかしいと思うのですが、ObjectsTotal()のところが......。mt4参考にさせてもらってます。それともmt5コード? こちらはMT4です。 MrBrooklin 2019.08.31 07:10 #9496 あらためて、みなさん、ごきげんよう。 先ほど投げかけた質問に対する回答が得られないのですが、とりあえずコードのことで相談させてください。 トレーディング、自動売買システム、ストラテジーテストのためのフォーラムです。 MQL4、MQL5に関する初心者向けの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 MrBrooklinさん 2019.08.30 14:15 皆さん、ごきげんよう!!! Metatrader5用のスクリプトコードの一部を紹介します。 #property copyright "Copyright 2019, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //---- показывать входные параметры #property script_show_inputs //--- #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh> CTrade m_trade; // trading object CSymbolInfo m_symbol; // symbol info object //+------------------------------------------------------------------+ //| Enum Stop or Limit | //+------------------------------------------------------------------+ enum ENUM_STOP_OR_LIMIT { stop=0, // Buy stop and Sell stop limit=1 // Buy limit and Sell limit }; //--- input parameters input ushort InpUpGap = 15; // Gap for pending orders UP from the current price (in points) input ushort InpUpStep = 30; // Step between orders UP (in points) input ushort InpDownGap = 15; // Gap for pending orders DOWN from the current price (in points) input ushort InpDownStep = 30; // Step between orders DOWN (in points) input ENUM_STOP_OR_LIMIT InpPending = stop; // Type of pending orders input uchar InpUpQuantity = 1; // UP quantity orders input uchar InpDownQuantity = 1; // DOWN quantity orders input double InpLots = 0.01; // Lots input ushort InpStopLoss = 50; // Stop Loss (in points) input ushort InpTakeProfit = 50; // Take Profit (in points) //--- ulong m_slippage=30; // slippage double ExtUpGap=0.0; double ExtUpStep=0.0; double ExtDownGap=0.0; double ExtDownStep=0.0; double ExtStopLoss=0.0; double ExtTakeProfit=0.0; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- if(InpLots<=0.0) { Print("The \"Lots\" can't be smaller or equal to zero"); return; } //--- if(!m_symbol.Name(Symbol())) // sets symbol name return; if(!RefreshRates()) return; string err_text=""; if(!CheckVolumeValue(InpLots,err_text)) { Print(err_text); return; } //--- if(IsFillingTypeAllowed(SYMBOL_FILLING_FOK)) m_trade.SetTypeFilling(ORDER_FILLING_FOK); else if(IsFillingTypeAllowed(SYMBOL_FILLING_IOC)) m_trade.SetTypeFilling(ORDER_FILLING_IOC); else m_trade.SetTypeFilling(ORDER_FILLING_RETURN); //--- m_trade.SetDeviationInPoints(m_slippage); m_trade.SetAsyncMode(true); //--- ExtUpGap = m_symbol.Point() * InpUpGap; ExtUpStep = m_symbol.Point() * InpUpStep; ExtDownGap = m_symbol.Point() * InpDownGap; ExtDownStep = m_symbol.Point() * InpDownStep; ExtStopLoss = m_symbol.Point() * InpStopLoss; ExtTakeProfit = m_symbol.Point() * InpTakeProfit; //--- start work double start_price_ask=m_symbol.Ask()-ExtUpGap; double start_price_bid=m_symbol.Bid()+ExtDownGap; //--- set pending orders for(int i=0; i<InpUpQuantity; i++) { double price_ask = start_price_ask+i*ExtUpStep; double price_bid = start_price_bid+i*ExtUpStep; if(InpPending==stop) { double sl = (ExtStopLoss==0.0) ? 0.0 : price_ask - ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_ask + ExtTakeProfit; m_trade.BuyStop(InpLots,m_symbol.NormalizePrice(price_ask),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } else { double sl = (ExtStopLoss==0.0) ? 0.0 : price_bid + ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_bid - ExtTakeProfit; m_trade.SellLimit(InpLots,m_symbol.NormalizePrice(price_bid),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } } for(int i=0; i<InpDownQuantity; i++) { double price_ask = start_price_ask-i*ExtDownStep; double price_bid = start_price_bid-i*ExtDownStep; if(InpPending==limit) { double sl = (ExtStopLoss==0.0) ? 0.0 : price_ask - ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_ask + ExtTakeProfit; m_trade.BuyLimit(m_symbol.LotsMin(),m_symbol.NormalizePrice(price_ask),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } else { double sl = (ExtStopLoss==0.0) ? 0.0 : price_bid + ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_bid - ExtTakeProfit; m_trade.SellStop(m_symbol.LotsMin(),m_symbol.NormalizePrice(price_bid),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } } } スクリプトは、アスクとビッドから一定の距離に保留中の指値注文、または逆指値注文を配置する必要があります。 指値注文は 問題なく設定されるが、逆指値注文は設定されない。保留中の買い逆指値注文と売り逆指値注文が設定されない理由を教えてください。 ウラジーミルさん、ありがとうございます。 もう一つ質問なのですが、マーケットが閉じている時(例えば週末)にスクリプトをテストする方法はありますか? 敬具 ウラジミール Rustam Bikbulatov 2019.08.31 09:12 #9497 Artyom Trishkin: どのリストから? そして、エディターのスタイラー(Ctrl+<)を使用してください。 どこから何を取り出せばいいのか? ヒントを教えてください。 Artyom Trishkin 2019.08.31 09:43 #9498 MrBrooklin: あらためて、みなさん、ごきげんよう。 先ほどの質問には誰も回答してくれませんでしたが、やはりコードについて教えてください。 もう一つ質問ですが、マーケットが閉じている時(週末など)にスクリプトをテストする方法はありますか? 敬具 ウラジミール いいえ、このスクリプトはクローズドマーケットでは動作しません。 このエラーを理解するために、設定レベルを計算している相対価格の値と、取引注文に 送信しているすべての価格レベルの値をログに出力してみてください。 Rustam Bikbulatov 2019.08.31 09:45 #9499 こんにちは、皆さん。オープンオーダーの隣にロットを作成しました。for(int no1=0; no1<OrdersTotal(); no1++) { if(OrderSelect(no1,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderType()== OP_BUY) { ObjectCreate("LOTB"+OrderTicket(),OBJ_TEXT,0,TimeCurrent(),OrderOpenPrice()); ObjectSetText("LOTB"+OrderTicket(),OrderLots()*100,20,"Arial",clrWheat); ObjectSetInteger(0,"LOTB"+OrderTicket(),OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER); } } } このリストから最後のテキストを取り出す方法を、コードの別の部分で教えていただけませんか? Artyom Trishkin 2019.08.31 09:47 #9500 Rustam Bikbulatov: ヒントを教えてください。 最後に開封された注文を探す必要があります。そのチケットを探す。次に、オブジェクト名のリストを使用して、オブジェクト名の行の最後の順序の見つかったチケットとの部分文字列の発生を見つけます。オブジェクト名に最後の注文のチケットがあると同時に、これは必要なグラフィックオブジェクトである。あとは、このグラフィカルなオブジェクトから必要なものを抽出するだけです。 1...943944945946947948949950951952953954955956957...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
この関数は、各注文の番号というか、ロット*100を書き込む。
ここで、最後の数字が何であったかを示す逆関数が必要である。
試してみてください。
オブジェクトがテキストを含む場合(数値ではない)、StringSubstr() を追加する必要があります。
begin_index - 文字列中の0から始まるインデックス, length - 数値の長さ(数値が何文字を占めるか)....だろう
これを試してみてください。
オブジェクトがテキストを持つ場合(数値ではない)、StringSubstr()を追加する。
begin_index - 文字列中の文字のインデックス,0から始まる, length - 数値の長さ(数値が何文字を占めるか).だろう
まあ、最初はこのすべての数字をグラフで探さなければならないのですが。ただ、そううまくはいきません。それが問題なのです。 すでにチェック済みです。
これを試してみてください。
オブジェクトが(数値でなく)テキストを持つ場合、StringSubstr()を追加する。
begin_index - 文字列中の0から始まるインデックス, length - 数値の長さ(数値が何文字を占めるか)....だろう
これと似たようなものですが、うまくいきません。 ゼロと表示されます。
これと同じですが、うまくいきません。 ゼロと表示されます。
値を設定するか、値を取るか?ObjectSetString()関数は、テキスト 値を設定 し、bool 値を返します。これは違うんです。そして、ループの頭の中がおかしいと思うのですが、ObjectsTotal()のところ...。mt4参考にさせてもらってます。それともmt5コード?
値を設定する必要があるのか、値を取る必要があるのか?ObjectSetString()関数は、テキスト 値を設定 し、bool 値を返します。これは違うんです。そして、ループの先頭がおかしいと思うのですが、ObjectsTotal()のところが......。mt4参考にさせてもらってます。それともmt5コード?
こちらはMT4です。
あらためて、みなさん、ごきげんよう。
先ほど投げかけた質問に対する回答が得られないのですが、とりあえずコードのことで相談させてください。
トレーディング、自動売買システム、ストラテジーテストのためのフォーラムです。
MQL4、MQL5に関する初心者向けの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。
MrBrooklinさん 2019.08.30 14:15
皆さん、ごきげんよう!!!
Metatrader5用のスクリプトコードの一部を紹介します。
スクリプトは、アスクとビッドから一定の距離に保留中の指値注文、または逆指値注文を配置する必要があります。 指値注文は 問題なく設定されるが、逆指値注文は設定されない。保留中の買い逆指値注文と売り逆指値注文が設定されない理由を教えてください。
ウラジーミルさん、ありがとうございます。
もう一つ質問なのですが、マーケットが閉じている時(例えば週末)にスクリプトをテストする方法はありますか?
敬具 ウラジミール
どのリストから?
そして、エディターのスタイラー(Ctrl+<)を使用してください。
どこから何を取り出せばいいのか?
ヒントを教えてください。
あらためて、みなさん、ごきげんよう。
先ほどの質問には誰も回答してくれませんでしたが、やはりコードについて教えてください。
もう一つ質問ですが、マーケットが閉じている時(週末など)にスクリプトをテストする方法はありますか?
敬具 ウラジミール
いいえ、このスクリプトはクローズドマーケットでは動作しません。
このエラーを理解するために、設定レベルを計算している相対価格の値と、取引注文に 送信しているすべての価格レベルの値をログに出力してみてください。
ヒントを教えてください。
最後に開封された注文を探す必要があります。そのチケットを探す。次に、オブジェクト名のリストを使用して、オブジェクト名の行の最後の順序の見つかったチケットとの部分文字列の発生を見つけます。オブジェクト名に最後の注文のチケットがあると同時に、これは必要なグラフィックオブジェクトである。あとは、このグラフィカルなオブジェクトから必要なものを抽出するだけです。