Nadaraya Watson Envelope LuxAlgo
- Indikatoren
- Yashar Seyyedin
- Version: 1.10
- Aktualisiert: 25 August 2024
- Aktivierungen: 5
Um Zugang zur MT4-Version zu erhalten, klicken Sie hier.
- Dies ist die exakte Konvertierung von "Nadaraya-Watson Envelope" von"LuxAlgo". (mit der Option "non-repaint input")
- Dies ist kein Indikator für die Verarbeitung von Leichtigkeit, wenn die Repaint-Eingabe auf true gesetzt ist.
- Alle Eingabeoptionen sind verfügbar.
- Puffer sind für die Verarbeitung in EAs verfügbar.
- Ich änderte die Standard-Eingabe-Einstellung auf nicht-repaint-Modus für eine bessere Leistung für mql Markt Validierung Verfahren erforderlich.
Hier ist der Quellcode eines einfachen Expert Advisors, der auf Basis der Signale dieses Indikators arbeitet.
#include <Trade\Trade.mqh> CTrade trade; int handle_nw=0; input group "EA Setting" input int magic_number=123456; //magische Zahl input double fixed_lot_size=0.01; // Feste Losgröße auswählen input bool multiplie_entry=false; //mehrere Einträge in dieselbe Richtung zulassen input group "nw setting" input double h = 8.;//Bandbreite input double mult = 3; // input ENUM_APPLIED_PRICE src = PRICE_CLOSE; //Quelle input bool repaint = false; //Übermalung Glättung int OnInit() { trade.SetExpertMagicNumber(magic_number); handle_nw=iCustom(_Symbol, PERIOD_CURRENT, "Market/Nadaraya Watson Envelope LuxAlgo", h, mult, src, repaint); if(handle_nw==INVALID_HANDLE) { Print("Indicator not found!"); return INIT_FAILED; } return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { IndicatorRelease(handle_nw); } void OnTick() { if(!isNewBar()) return; /////////////////////////////////////////////////////////////////// bool buy_condition=true; if(!multiplie_entry) buy_condition &= (BuyCount()==0); buy_condition &= (IsNWBuy(1)); if(buy_condition) { CloseSell(); Buy(); } bool sell_condition=true; if(!multiplie_entry) sell_condition &= (SellCount()==0); sell_condition &= (IsNWSell(1)); if(sell_condition) { CloseBuy(); Sell(); } } bool IsNWBuy(int i) { double array[]; ArraySetAsSeries(array, true); CopyBuffer(handle_nw, 5, i, 1, array); return array[0]!=EMPTY_VALUE; } bool IsNWSell(int i) { double array[]; ArraySetAsSeries(array, true); CopyBuffer(handle_nw, 6, i, 1, array); return array[0]!=EMPTY_VALUE; } int BuyCount() { int buy=0; for(int i=0;i<PositionsTotal();i++) { ulong ticket=PositionGetTicket(i); if(ticket==0) continue; if(PositionGetInteger(POSITION_TYPE) != POSITION_TYPE_BUY) continue; if(PositionGetInteger(POSITION_MAGIC) != magic_number) continue; buy++; } return buy; } int SellCount() { int sell=0; for(int i=0;i<PositionsTotal();i++) { ulong ticket=PositionGetTicket(i); if(ticket==0) continue; if(PositionGetInteger(POSITION_TYPE) != POSITION_TYPE_SELL) continue; if(PositionGetInteger(POSITION_MAGIC) != magic_number) continue; sell++; } return sell; } void Buy() { double Ask=SymbolInfoDouble(_Symbol, SYMBOL_ASK); if(!trade.Buy(fixed_lot_size, _Symbol, Ask, 0, 0, "")) { Print("Error executing order: ", GetLastError()); //ExpertRemove(); } } void Sell() { double Bid=SymbolInfoDouble(_Symbol, SYMBOL_BID); if(!trade.Sell(fixed_lot_size, _Symbol, Bid, 0, 0, "")) { Print("Error executing order: ", GetLastError()); //ExpertRemove(); } } void CloseBuy() { for(int i=PositionsTotal()-1;i>=0;i--) { ulong ticket=PositionGetTicket(i); if(ticket==0) continue; if(PositionGetInteger(POSITION_TYPE) != POSITION_TYPE_BUY) continue; if(PositionGetInteger(POSITION_MAGIC) != magic_number) continue; if(trade.PositionClose(ticket)==false) { Print("Error closing position: ", GetLastError()); //ExpertRemove(); } } } void CloseSell() { for(int i=PositionsTotal()-1;i>=0;i--) { ulong ticket=PositionGetTicket(i); if(ticket==0) continue; if(PositionGetInteger(POSITION_TYPE) != POSITION_TYPE_SELL) continue; if(PositionGetInteger(POSITION_MAGIC) != magic_number) continue; if(trade.PositionClose(ticket)==false) { Print("Error closing position: ", GetLastError()); //ExpertRemove(); } } } datetime timer=NULL; bool isNewBar() { datetime candle_start_time= (int)(TimeCurrent()/(PeriodSeconds()))*PeriodSeconds(); if(timer==NULL) {} else if(timer==candle_start_time) return false; timer=candle_start_time; return true; }