MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1349 1...134213431344134513461347134813491350135113521353135413551356...1953 新しいコメント Tretyakov Rostyslav 2021.01.11 10:27 #13481 Порт-моне тв: なぜか自分のはうまくいかないし、前にも試したことがあるのに思い出せませんとにかく、皆さんありがとうございました。良いトレードを! トレードを開始するコードを投稿してください。 Alekseu Fedotov 2021.01.11 10:39 #13482 MakarFX:ノーパラメータ 0 はこのグラフに属していることを示す すみません、機能と混同していました StringFind Порт-моне тв 2021.01.11 10:41 #13483 MakarFX:トレードを開始するコードを投稿してください。 //+------------------------------------------------------------------+ //| равноудаленный канал.mq4 | //+------------------------------------------------------------------+ #property copyright "" #property link "" #property version "1.00" #property strict extern int Magic = 777701; extern double Lot = 0.01; extern int Slippage = 3; double pXa, pXb; int ticket; int OrderOfSymbol; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- //Проверим что есть ли равноудаленный канал: if(ObjectsTotal(OBJ_RECTANGLE)==0) {Comment("Нарисуйте равноудаленный канал для открытия сделки по покупке!");} //Получим ИМЯ прямоугольника: for(int n=0;n<ObjectsTotal();n++) { string name=ObjectName(n); if(ObjectType(name)==OBJ_RECTANGLE) { if(ObjectFind(0,"BUY")==0) { datetime t1a = (datetime) ObjectGet(name,OBJPROP_TIME1); datetime t2a = (datetime) ObjectGet(name,OBJPROP_TIME2); double p1a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits); double p2a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits); OrderOfSymbol=CounterOrderTradeType(-1); if (OrderOfSymbol<1) if (Close[1]>Open[1]) if(TimeCurrent()>t1a && TimeCurrent()< t2a && Bid < p1a && Bid > p2a ) { ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, 0, 0, "открыт ордер на покупку", Magic, 0, Blue); } } } } //Проверим что есть ли уже равноудаленный канал и он в единственном экземпляре: if(ObjectsTotal(OBJ_RECTANGLE)==1) {Comment("Нарисуйте второй равноудаленный канал для закрытия сделки по покупке!");} //Получим ИМЯ прямоугольника: for(int n=0;n<ObjectsTotal();n++) { string name=ObjectName(n); if(ObjectType(name)==OBJ_RECTANGLE) { if(ObjectFind(0,"CLOSE")==0) { datetime t1b = (datetime) ObjectGet(name,OBJPROP_TIME1); datetime t2b = (datetime) ObjectGet(name,OBJPROP_TIME2); double p1b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits); double p2b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits); if(TimeCurrent()>t1b && TimeCurrent()< t2b && Bid < p1b && Bid > p2b ) CloseBuyPositions1(); } } } //Проверим что есть ли уже 2 равноудаленных канала: if(ObjectsTotal(OBJ_CHANNEL)==2) {Comment("Каналы по открытию и закрытию ордеров по покупке выставлены - идет торговля!");} } //+------------------------------------------------------------------+ void CloseBuyPositions1() { for(int i = OrdersTotal() - 1; i >= 0; i--) if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if(OrderMagicNumber() == Magic) if(OrderSymbol() == Symbol()) { if(OrderType()==OP_BUY) { if(OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL)){Print("Order Close");} } } } //+------------------------------------------------------------------+ //| Подсчет ордеров потекущему символу | //+------------------------------------------------------------------+ int CounterOrderTradeType(ENUM_ORDER_TYPE order_type) { int cnt=0; //---- for(int pos=OrdersTotal()-1;pos>=0;pos--) { if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) continue; if(OrderSymbol()!=_Symbol) continue; if(order_type == OrderType() || order_type == -1) cnt++; } //---- return(cnt); } 以下は、あなたの関数を貼り付けたものです。 Tretyakov Rostyslav 2021.01.11 10:58 #13484 Порт-моне тв:以下に、あなたの機能を貼り付けます。ファーストOrderOfSymbol=CounterOrderTradeType(-1); はここに入れるべきです。void OnTick() { OrderOfSymbol=CounterOrderTradeType(-1); あとは私が修正します。 Tretyakov Rostyslav 2021.01.11 11:10 #13485 Порт-моне тв:以下は、あなたの関数を貼り付けたものです。 トライ //+------------------------------------------------------------------+ //| равноудаленный канал.mq4 | //+------------------------------------------------------------------+ #property copyright "" #property link "" #property version "1.00" #property strict extern int Magic = 777701; extern double Lot = 0.01; extern int Slippage = 3; double pXa, pXb; int ticket; int OrderOfSymbol; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- OrderOfSymbol=CounterOrderTradeType(-1); //Проверим что есть ли равноудаленный канал: if(ObjectFind(0,"BUY")!=0) {Comment("Нарисуйте равноудаленный канал для открытия сделки по покупке!");} if(ObjectFind(0,"BUY")==0) { datetime t1a = (datetime) ObjectGet("BUY",OBJPROP_TIME1); datetime t2a = (datetime) ObjectGet("BUY",OBJPROP_TIME2); double p1a=NormalizeDouble(ObjectGet("BUY",OBJPROP_PRICE1),Digits); double p2a=NormalizeDouble(ObjectGet("BUY",OBJPROP_PRICE2),Digits); if (OrderOfSymbol<1) if (Close[1]>Open[1]) if(TimeCurrent()>t1a && TimeCurrent()< t2a && Bid < p1a && Bid > p2a ) { ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, 0, 0, "открыт ордер на покупку", Magic, 0, Blue); } } //Проверим что есть ли уже равноудаленный канал и он в единственном экземпляре: if(ObjectFind(0,"CLOSE")!=0) {Comment("Нарисуйте второй равноудаленный канал для закрытия сделки по покупке!");} //Получим ИМЯ прямоугольника: if(ObjectFind(0,"CLOSE")==0) { datetime t1b = (datetime) ObjectGet("CLOSE",OBJPROP_TIME1); datetime t2b = (datetime) ObjectGet("CLOSE",OBJPROP_TIME2); double p1b=NormalizeDouble(ObjectGet("CLOSE",OBJPROP_PRICE1),Digits); double p2b=NormalizeDouble(ObjectGet("CLOSE",OBJPROP_PRICE2),Digits); if(TimeCurrent()>t1b && TimeCurrent()< t2b && Bid < p1b && Bid > p2b ) CloseBuyPositions1(); } //Проверим что есть ли уже 2 равноудаленных канала: if(ObjectsTotal(OBJ_CHANNEL)==2) {Comment("Каналы по открытию и закрытию ордеров по покупке выставлены - идет торговля!");} } //+------------------------------------------------------------------+ void CloseBuyPositions1() { for(int i = OrdersTotal() - 1; i >= 0; i--) if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if(OrderMagicNumber() == Magic) if(OrderSymbol() == Symbol()) { if(OrderType()==OP_BUY) { if(OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL)){Print("Order Close");} } } } //+------------------------------------------------------------------+ //| Подсчет ордеров потекущему символу | //+------------------------------------------------------------------+ int CounterOrderTradeType(ENUM_ORDER_TYPE order_type) { int cnt=0; //---- for(int pos=OrdersTotal()-1;pos>=0;pos--) { if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) continue; if(OrderSymbol()!=_Symbol) continue; if(order_type == OrderType() || order_type == -1) cnt++; } //---- return(cnt); } Tretyakov Rostyslav 2021.01.11 11:13 #13486 もう少し調整とアップデートを Порт-моне тв 2021.01.11 11:28 #13487 MakarFX: もう少し手を加えてアップデートしました 外出中なので、明日テストしてみます。ありがとうございます。 Tretyakov Rostyslav 2021.01.11 11:33 #13488 Порт-моне тв:外出中なので、明日テストしてみます。ありがとうございます。 接触 Platon75 2021.01.11 15:42 #13489 皆さん、ごきげんよう。トレンドラインと水平線が ある色で交差したときにシグナルを出すEAを持っています。トレンドラインと水平線があるスタイルで交差したときにシグナルを出すように作り直すことにしました。うまくいった。しかし、トレンドラインがビームだけを右に交差させたときにシグナルを出す必要があります。を追加しなければならないことを理解しています。 objprop_ray_right が、どこをどうしたらいいのかわからない。ありがとう ございました。 //+------------------------------------------------------------------+ //| TrendlineCrossAlert.mq5 | //| Copyright 2018, Strx | //| https://www.mql5.com/en/users/strx | //+------------------------------------------------------------------+ #define EAName "TrendlineCrossAlert" #define EAVersion "1.01" #property copyright "Copyright 2018, Strx" #property link "https://www.mql5.com/en/users/strx" #property version EAVersion #property description "Horizontal and Trendlines cross detection on any pair/timeframe" #property description "good for scalping on small timeframes (M1 to M15) and trend following on bigger ones." #property description "It send notifications when price crosses trendlines and horizontal lines" #property description "of specified color and when it happens, it change its color to CrossedColor input parameter" #property description "to be sure not to send multiple notifications for same line" #include <Arrays\ArrayString.mqh> #include <Trade\SymbolInfo.mqh> #include <ChartObjects\ChartObject.mqh> #include <ChartObjects\ChartObjectsLines.mqh> //--- External inputs sinput ENUM_LINE_STYLE MonitoringStyle = STYLE_SOLID; //MonitoringColor, EA only monitors this lines style sinput ENUM_LINE_STYLE CrossedStyle = STYLE_DASH; //CrossedColor, EA changes crossed lines style to this value sinput bool EnableAlerts = true; sinput bool EnableNotifications=true; sinput bool EnableEmails=false; //+------------------------------------------------------------------+ //| Trendlines and Horizontal lines crossing notification expert //+------------------------------------------------------------------+ class CTrendlineCrossAlertExpert { protected: CSymbolInfo m_symbol; // symbol info object //--- Logic vars CArrayString m_objectNames; public: CTrendlineCrossAlertExpert(void); ~CTrendlineCrossAlertExpert(void); bool Init(void); void Deinit(void); bool Processing(void); protected: //--- Inline functions string FormatPrice(double price){ return StringFormat("%."+(string)m_symbol.Digits()+"f",price); }; bool IsNewBar(){ return iVolume(NULL,0,0)==1; }; //--- Logic functions int FindActiveObjects(); bool ActiveObject(string objName); bool PriceCrossed(string objName); void NotifyCrossing(string objName); }; //--- global expert CTrendlineCrossAlertExpert ExtExpert; //+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ CTrendlineCrossAlertExpert::CTrendlineCrossAlertExpert(void){} //+------------------------------------------------------------------+ //| Destructor | //+------------------------------------------------------------------+ CTrendlineCrossAlertExpert::~CTrendlineCrossAlertExpert(void){} //+------------------------------------------------------------------+ //| Initialization and checking for input parameters | //+------------------------------------------------------------------+ bool CTrendlineCrossAlertExpert::Init(void) { //--- initialize common information m_symbol.Name(Symbol()); // symbol return(true); } //+------------------------------------------------------------------+ //| main function returns true if any position processed | //+------------------------------------------------------------------+ bool CTrendlineCrossAlertExpert::Processing(void) { bool rv=false; int i; string objName; if(m_symbol.RefreshRates()) { if(FindActiveObjects()) { for(i=0; i<m_objectNames.Total(); i++) { objName=m_objectNames[i]; if(PriceCrossed(objName)) { ObjectSetInteger(0,objName,OBJPROP_STYLE,CrossedStyle); NotifyCrossing(objName); } } } } Comment(EAName," v.",EAVersion," parameters: MonitoringStyle=",MonitoringStyle,", CrossedStyle=",CrossedStyle,", EnableAlerts=",EnableAlerts,", EnableNotifications=",EnableNotifications,", EnableEmails=",EnableEmails,"\n", "Monitoring ",m_objectNames.Total()," lines"); return(rv); } //+------------------------------------------------------------------+ //| Send Notifications function //+------------------------------------------------------------------+ void CTrendlineCrossAlertExpert::NotifyCrossing(string objName) { string msg="Price crossed line ''"+objName+"' on "+m_symbol.Name(); if(EnableAlerts) Alert(msg); if(EnableNotifications) SendNotification(msg); if(EnableEmails) SendMail(EAName+" Event",msg); Print(msg); } //+------------------------------------------------------------------+ //| Returns true if objName has been crossed up or down by current price //+------------------------------------------------------------------+ bool CTrendlineCrossAlertExpert::PriceCrossed(string objName) { ENUM_OBJECT objType; double objPrice=0.0,openPrice,curPrice; objType=(ENUM_OBJECT)ObjectGetInteger(0,objName,OBJPROP_TYPE); if(objType==OBJ_HLINE) { objPrice= ObjectGetDouble(0, objName, OBJPROP_PRICE); }else if(objType==OBJ_TREND){ objPrice=ObjectGetValueByTime(0,objName,TimeCurrent(),0); } if(objPrice) { openPrice= iOpen(NULL,0,0); curPrice = iClose(NULL,0,0); return (openPrice<=objPrice && curPrice>objPrice) || (openPrice>=objPrice && curPrice<objPrice); } return false; } //+------------------------------------------------------------------+ //| Returns true if object has to be monitored based on color and //| previous crosses //+------------------------------------------------------------------+ bool CTrendlineCrossAlertExpert::ActiveObject(string objName) { int objStyle=(int)ObjectGetInteger(0,objName,OBJPROP_STYLE,0); return objStyle == MonitoringStyle; } //+------------------------------------------------------------------+ //| Returns the list of object to be monitored //+------------------------------------------------------------------+ int CTrendlineCrossAlertExpert::FindActiveObjects() { m_objectNames.Clear(); int nHLines=ObjectsTotal(0,-1,OBJ_HLINE), nTrendLines=ObjectsTotal(0,-1,OBJ_TREND), i; string objName; for(i=0; i<nHLines; i++) { objName=ObjectName(0,i,0,OBJ_HLINE); if(ActiveObject(objName)) { m_objectNames.Add(objName); } } for(i=0; i<nTrendLines; i++) { objName=ObjectName(0,i,0,OBJ_TREND); if(ActiveObject(objName)) { m_objectNames.Add(objName); } } return m_objectNames.Total(); } //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit(void) { if(!ExtExpert.Init()) return(INIT_FAILED); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert new tick handling function | //+------------------------------------------------------------------+ void OnTick(void) { ExtExpert.Processing(); } //+------------------------------------------------------------------+ Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов www.mql5.com Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 Buba_rus 2021.01.11 16:43 #13490 こんにちは。 Expert Advisorは条件を確認し、新しいバーが表示されたら注文を出すことになっています。 関数 宣言はグローバル、名前空間、クラススコープでのみ許可されています」というエラーが出ました。グローバル、名前空間、クラススコープでのみ関数宣言が可能」と訳した。 やはり理解できない、私は頭が悪すぎるのだ。教えてください、またはどこで読めるか教えてください。ありがとうございました)*** Документация по MQL5: Программы MQL5 / Ошибки выполнения www.mql5.com Ошибки выполнения - Программы MQL5 - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 1...134213431344134513461347134813491350135113521353135413551356...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
トレードを開始するコードを投稿してください。
ノー
パラメータ 0 はこのグラフに属していることを示す
すみません、機能と混同していました
StringFind
トレードを開始するコードを投稿してください。
以下は、あなたの関数を貼り付けたものです。
以下に、あなたの機能を貼り付けます。
ファースト
OrderOfSymbol=CounterOrderTradeType(-1);
はここに入れるべきです。
あとは私が修正します。以下は、あなたの関数を貼り付けたものです。
トライ
もう少し手を加えてアップデートしました
外出中なので、明日テストしてみます。ありがとうございます。
外出中なので、明日テストしてみます。ありがとうございます。
皆さん、ごきげんよう。トレンドラインと水平線が ある色で交差したときにシグナルを出すEAを持っています。トレンドラインと水平線があるスタイルで交差したときにシグナルを出すように作り直すことにしました。うまくいった。しかし、トレンドラインがビームだけを右に交差させたときにシグナルを出す必要があります。を追加しなければならないことを理解しています。
objprop_ray_right
こんにちは。
Expert Advisorは条件を確認し、新しいバーが表示されたら注文を出すことになっています。
関数 宣言はグローバル、名前空間、クラススコープでのみ許可されています」というエラーが出ました。グローバル、名前空間、クラススコープでのみ関数宣言が可能」と訳した。
やはり理解できない、私は頭が悪すぎるのだ。教えてください、またはどこで読めるか教えてください。ありがとうございました)
***