MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1705 1...169816991700170117021703170417051706170717081709171017111712...1953 新しいコメント Galim_V 2021.10.31 14:32 #17041 はじめまして、スクリプトは私がお願いしたとおりに動作します。 //+------------------------------------------------------------------+ //| Око_15.mq4 | //| Copyright 2019, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2019, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //#include <OOP_CLibArr_01.mqh> struct Gass { int mag; double prof; }; Gass plus[]= {{0},{0}}; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class Ohistory { public: Ohistory( string _sy = "", int _op =-1, int _mn =-1, datetime _dt =0 ) { int k=3; GetProfit_His(_sy, _op, _mn, 0); Alert("Конструктор"," k =",k); } ~Ohistory() { Alert("Деструктор"); } double inits(Gass& us[],int _magik,datetime _zeit) { double pro=GetProfit_His(Symbol(), -1, _magik, _zeit); for(int i=0; i<ArraySize(us); i++) { if(us[i].mag==3) pro+=us[i].prof; } return(pro); } private: double GetProfit_His(string sy="", int op=-1, int mn=-1, datetime dt=0) { double p=0; int i, k=OrdersHistoryTotal(); if(sy=="") sy=Symbol(); for(i=0; i<k; i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { if(mn<0 || OrderMagicNumber()==mn) { if(dt<OrderCloseTime()) { p+=OrderProfit()+OrderCommission()+OrderSwap(); } } } } } } Alert(" p =",p); return(p); } }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int si=5, m=3; ArrayResize(plus,si); for(int i=0; i<ArraySize(plus); i++) plus[i].mag=m; int size=ArraySize(plus); if(si>=3) { switch(size==0) { case 0: if(plus[0].mag==m) plus[0].prof=400; case 1: if(plus[1].mag==m) plus[1].prof=300; ; case 2: if(plus[1].mag==5) plus[2].prof=90; } } for(int i=0; i<ArraySize(plus); i++) { Print(" plus[i].prof =",plus[i].prof); } Ohistory hi; Alert("Мужду"); Print(" Сколько ???', ",hi.inits(plus,-1,D'2021.10.28')); } //+------------------------------------------------------------------+ でも、動かしたら class Ohistory をインクルードファイルに書き込むと、 構造体の配列が見えなくなります。 struct Gass { int mag; double prof; }; Gass plus[]= {{0},{0}}; ろんりせき double inits(Gass& us[],int _magik,datetime _zeit) そういうわけにはいきませんね。どうやったら直るのかがわからない。 EVGENII SHELIPOV 2021.10.31 14:52 #17042 ヒントを教えてください。ここでは、注文の価格グリッドと最小/最大注文を計算し表示する2つの関数を紹介します。後者は、前の関数のアナログをベースに自分で書きました。最初のものは期待通りに動作しますが、2番目のもの、最小/最大注文価格は、チャート上に表示されたくありません。 エラーを発見するためにご協力ください。エラーの原因を教えてください。 //+----------------------------------------------------------------------------+ //| Расчет средней цены (0)-buy (1)-sell ()-all | //+----------------------------------------------------------------------------+ double GetAveragePrice(int ot=-1) { double order_lots = 0, order_price = 0, avg_price = 0; { for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType()==ot||ot<0) { order_lots += OrderLots(); order_price += OrderOpenPrice() * OrderLots(); } } } } } avg_price = NormalizeDouble(order_price / order_lots, Digits); if(ObjectFind(0,"AveragePriceLine"+IntegerToString(ot))!=0) ObjectCreate(0,"AveragePriceLine"+IntegerToString(ot),OBJ_HLINE, 0, 0, avg_price); else ObjectSetDouble(0,"AveragePriceLine"+IntegerToString(ot),OBJPROP_PRICE,avg_price); if(ot==0) ObjectSet("AveragePriceLine"+IntegerToString(ot),OBJPROP_COLOR, clrLime); if(ot==1) ObjectSet("AveragePriceLine"+IntegerToString(ot),OBJPROP_COLOR, clrRed); return(avg_price); } //+----------------------------------------------------------------------------+ //| Расчет средней цены мин и макс ордеров(0)-buy (1)-sell ()-all | //+----------------------------------------------------------------------------+ double GetAveragePriceManMaxOrders(int ot =-1) { double avg_price_min_max_orders = 0; { for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType()==ot||ot<0) { avg_price_min_max_orders = NormalizeDouble((PriceMaxOrder()*FindLastLots() + PriceMinOrder()*GetMinLotOrder()) /(FindLastLots() + GetMinLotOrder()),Digits()); if(ObjectFind(0,"AveragePriceLineMinMaxOrders"+IntegerToString(ot))!=0) ObjectCreate(0,"AveragePriceLineMinMaxOrders"+IntegerToString(ot),OBJ_HLINE, 0, 0, avg_price_min_max_orders); else ObjectSetDouble(0,"AveragePriceLineMinMaxOrders"+IntegerToString(ot),OBJPROP_PRICE, avg_price_min_max_orders); if(ot==0) ObjectSet("AveragePriceLineMinMaxOrders"+IntegerToString(ot),OBJPROP_COLOR, clrLime); ObjectSet("AveragePriceLineMinMaxOrders", OBJPROP_STYLE, STYLE_DASH); if(ot==1) ObjectSet("AveragePriceLineMinMaxOrders"+IntegerToString(ot),OBJPROP_COLOR, clrRed); ObjectSet("AveragePriceLineMinMaxOrders", OBJPROP_STYLE, STYLE_DASH); } } } } } return(avg_price_min_max_orders); } Tretyakov Rostyslav 2021.10.31 15:00 #17043 EVGENII SHELIPOV #:ヒントを教えてください。ここでは、注文の価格グリッドと最小/最大注文を計算し表示する2つの関数を紹介します。後者は、前の関数のアナログをベースに自分で書きました。最初のものは期待通りに動作しますが、2番目のもの、最小/最大注文価格は、チャート上に表示されたくありません。エラーを発見するためにご協力ください。エラーの原因を教えてください。 //+----------------------------------------------------------------------------+ //| Расчет средней цены мин и макс | //+----------------------------------------------------------------------------+ double GetAveragePriceManMaxOrders() { double avg_price_min_max_orders = 0; double avg=NormalizeDouble((PriceMaxOrder()*FindLastLots() + PriceMinOrder()*GetMinLotOrder()) /(FindLastLots() + GetMinLotOrder()),Digits()); if(avg>0) { avg_price_min_max_orders = avg; if(ObjectFind(0,"AveragePriceLineMinMaxOrders"+IntegerToString(ot))!=0) ObjectCreate(0,"AveragePriceLineMinMaxOrders"+IntegerToString(ot),OBJ_HLINE, 0, 0, avg_price_min_max_orders); else ObjectSetDouble(0,"AveragePriceLineMinMaxOrders"+IntegerToString(ot),OBJPROP_PRICE, avg_price_min_max_orders); if(ot==0) ObjectSet("AveragePriceLineMinMaxOrders"+IntegerToString(ot),OBJPROP_COLOR, clrLime); ObjectSet("AveragePriceLineMinMaxOrders", OBJPROP_STYLE, STYLE_DASH); if(ot==1) ObjectSet("AveragePriceLineMinMaxOrders"+IntegerToString(ot),OBJPROP_COLOR, clrRed); ObjectSet("AveragePriceLineMinMaxOrders", OBJPROP_STYLE, STYLE_DASH); } return(avg_price_min_max_orders); } EVGENII SHELIPOV 2021.10.31 15:32 #17044 MakarFX #: いや、マカー、ダメなんです。 Tretyakov Rostyslav 2021.10.31 16:08 #17045 EVGENII SHELIPOV #:いや、マカー、ダメなんです。 機能一覧 PriceMaxOrder() FindLastLots() PriceMinOrder() GetMinLotOrder() FindLastLots() GetMinLotOrder() EVGENII SHELIPOV 2021.10.31 16:14 #17046 MakarFX #:機能一覧 PriceMaxOrder()FindLastLots()PriceMinOrder()GetMinLotOrder()FindLastLots()GetMinLotOrder() //+----------------------------------------------------------------------------+ //| Определение размера лота последнего ордера | //+----------------------------------------------------------------------------+ double FindLastLots() { int oldticket; double oldlots = 0; ticket = 0; for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY || OrderType() == OP_SELL) { oldticket = OrderTicket(); if(oldticket > ticket) { ticket = oldticket; oldlots = OrderLots(); } } } } } return(oldlots); } //+----------------------------------------------------------------------------+ //| Определение цены открытия макс лота | //+----------------------------------------------------------------------------+ double PriceMaxOrder() { double max_price = 0 ; max_ticket = 0; { for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY || OrderType() == OP_SELL) { if(OrderTicket() > max_ticket) { max_ticket = OrderTicket(); max_price = OrderOpenPrice(); } } } } } } return(max_price); } //+----------------------------------------------------------------------------+ //| Определение размера лота минимального ордера в сетке | //+----------------------------------------------------------------------------+ double GetMinLotOrder() { double min_lot_order = 0; min_ticket=INT_MAX; { for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY || OrderType() == OP_SELL) { if(OrderTicket() < min_ticket) { min_ticket = OrderTicket(); min_lot_order = OrderLots(); } } } } } } return(min_lot_order); } //+----------------------------------------------------------------------------+ //| Определение цены открытия мин лота | //+----------------------------------------------------------------------------+ double PriceMinOrder() { double min_price = 0; min_ticket=INT_MAX; { for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY || OrderType() == OP_SELL) { if(OrderTicket() < min_ticket) { min_ticket = OrderTicket(); min_price = OrderOpenPrice(); } } } } } } return(min_price); } Tretyakov Rostyslav 2021.10.31 16:23 #17047 EVGENII SHELIPOV #: //+----------------------------------------------------------------------------+ //| Расчет средней цены мин и макс | //+----------------------------------------------------------------------------+ double GetAveragePriceManMaxOrders() { double avg_price_min_max_orders = 0; if(OrdersTotal()>1) { avg_price_min_max_orders = NormalizeDouble((PriceMaxOrder()*FindLastLots() + PriceMinOrder() *GetMinLotOrder())/(FindLastLots() + GetMinLotOrder()),Digits()); if(ObjectFind(0,"AveragePriceLineMinMaxOrders")!=0) ObjectCreate(0,"AveragePriceLineMinMaxOrders",OBJ_HLINE, 0, 0, avg_price_min_max_orders); else ObjectSetDouble(0,"AveragePriceLineMinMaxOrders",OBJPROP_PRICE, avg_price_min_max_orders); } return(avg_price_min_max_orders); } Alexey Viktorov 2021.10.31 16:25 #17048 Galim_V #:はじめまして、スクリプトは私がお願いしたとおりに動作します。でも、動かしたらをインクルードファイルに書き込むと、 構造体の配列が見えなくなります。ろんりせきそういうわけにはいきませんね。どうすれば直るのかがわからない。 構造体もクラスの上のインクルードファイルに移動します。 Galim_V 2021.10.31 17:08 #17049 Alexey Viktorov #:構造体もクラスの上のインクルードファイルに移動します。 わかったよ!)ありがとう、アレクセイ EVGENII SHELIPOV 2021.10.31 17:17 #17050 MakarFX #: マカー 何かがおかしい。大好きですありがとうございます。私自身、あまりきれいではないオプションを見つけましたが、それは有効です。 1...169816991700170117021703170417051706170717081709171017111712...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
はじめまして、スクリプトは私がお願いしたとおりに動作します。
でも、動かしたら
class Ohistory
をインクルードファイルに書き込むと、 構造体の配列が見えなくなります。
ろんりせき
そういうわけにはいきませんね。どうやったら直るのかがわからない。
ヒントを教えてください。ここでは、注文の価格グリッドと最小/最大注文を計算し表示する2つの関数を紹介します。後者は、前の関数のアナログをベースに自分で書きました。最初のものは期待通りに動作しますが、2番目のもの、最小/最大注文価格は、チャート上に表示されたくありません。
エラーを発見するためにご協力ください。エラーの原因を教えてください。
ヒントを教えてください。ここでは、注文の価格グリッドと最小/最大注文を計算し表示する2つの関数を紹介します。後者は、前の関数のアナログをベースに自分で書きました。最初のものは期待通りに動作しますが、2番目のもの、最小/最大注文価格は、チャート上に表示されたくありません。
エラーを発見するためにご協力ください。エラーの原因を教えてください。
いや、マカー、ダメなんです。
いや、マカー、ダメなんです。
機能一覧
PriceMaxOrder()
FindLastLots()
PriceMinOrder()
GetMinLotOrder()
FindLastLots()
GetMinLotOrder()
機能一覧
PriceMaxOrder()
FindLastLots()
PriceMinOrder()
GetMinLotOrder()
FindLastLots()
GetMinLotOrder()
はじめまして、スクリプトは私がお願いしたとおりに動作します。
でも、動かしたら
をインクルードファイルに書き込むと、 構造体の配列が見えなくなります。
ろんりせき
そういうわけにはいきませんね。どうすれば直るのかがわからない。
構造体もクラスの上のインクルードファイルに移動します。
構造体もクラスの上のインクルードファイルに移動します。
わかったよ!)ありがとう、アレクセイ
マカー 何かがおかしい。大好きですありがとうございます。私自身、あまりきれいではないオプションを見つけましたが、それは有効です。