Wszystkie pytania dozwolone początkujących programistów
- ninjaproject
- Maniak
- Posty: 4944
- Rejestracja: 30 lip 2019, 13:15
Re: Wszystkie pytania dozwolone początkujących programistów
"1" to wiersz
Wynika stąd, że kod od tego miejsca nie może dalej ruszyć, czyli błąd jest przed.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.
Programuję wskaźniki i EA do MetaTrader 4/5.
- ninjaproject
- Maniak
- Posty: 4944
- Rejestracja: 30 lip 2019, 13:15
Re: Wszystkie pytania dozwolone początkujących programistów
@Beginner001,
Magic number nie jest wymaga dla transakcji, i tak, możesz nadawać różne MN jak sobie chcesz, i możesz w jednym EA mieć tyle strategii, ile system wytrzyma. Tylko potrzebujesz tymi strategiami osobno zarządzać, czyli pozycje rozróżniać, które należą do której strategii.
Magic number nie jest wymaga dla transakcji, i tak, możesz nadawać różne MN jak sobie chcesz, i możesz w jednym EA mieć tyle strategii, ile system wytrzyma. Tylko potrzebujesz tymi strategiami osobno zarządzać, czyli pozycje rozróżniać, które należą do której strategii.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.
Programuję wskaźniki i EA do MetaTrader 4/5.
Re: Wszystkie pytania dozwolone początkujących programistów
EA jest wprowadzana przez ten wizard i po komplikacji wszystkie ustawienia nikną i muszę ponownie wkleić Ea do powyższego szablonu przez kopiuj/wklei.Koniecznie muszę się podszkolić.
Podziękował.
Podziękował.
- ninjaproject
- Maniak
- Posty: 4944
- Rejestracja: 30 lip 2019, 13:15
Re: Wszystkie pytania dozwolone początkujących programistów
Przecież musisz wybrać czy chcesz EA, czy wskaźnik, czy skrypt, czy bibliotekę, czy plik mqh, czy klasę chcesz pisać!
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.
Programuję wskaźniki i EA do MetaTrader 4/5.
Re: Wszystkie pytania dozwolone początkujących programistów
Opisałem dwa przykłady, podczas wprowadzania EA jako Ekspert na platformie Bossafx znikały wszystkie ustawienia, na XM wszystko wchodziło i po sprawdzeniu błędów normalnie pracowało, następnie musiałem skopiować EA z XM i ponownie wkleić do pustego EA w bossiefx aby zaczął pracować. Te same czynności a różne efekty, tu nie było mojego błędu.
W temacie o wskaźniku chodziło mi o błędy,( w nim mam jeszcze jakiś błąd ponieważ po komplikacji i zapisaniu w wskaźnikach nie wyświetla na wykresie.
W temacie o wskaźniku chodziło mi o błędy,( w nim mam jeszcze jakiś błąd ponieważ po komplikacji i zapisaniu w wskaźnikach nie wyświetla na wykresie.
- ninjaproject
- Maniak
- Posty: 4944
- Rejestracja: 30 lip 2019, 13:15
Re: Wszystkie pytania dozwolone początkujących programistów
Pokaż screena po kompilacji, część z błędami, lub mi mq4 zapodaj, to ci powiem o co biega.dexter pisze: ↑26 paź 2019, 08:38Opisałem dwa przykłady, podczas wprowadzania EA jako Ekspert na platformie Bossafx znikały wszystkie ustawienia, na XM wszystko wchodziło i po sprawdzeniu błędów normalnie pracowało, następnie musiałem skopiować EA z XM i ponownie wkleić do pustego EA w bossiefx aby zaczął pracować. Te same czynności a różne efekty, tu nie było mojego błędu.
W temacie o wskaźniku chodziło mi o błędy,( w nim mam jeszcze jakiś błąd ponieważ po komplikacji i zapisaniu w wskaźnikach nie wyświetla na wykresie.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.
Programuję wskaźniki i EA do MetaTrader 4/5.
Re: Wszystkie pytania dozwolone początkujących programistów
//+------------------------------------------------------------------+
//| Grid_Template.mq4.mq4 |
//| Mql4 Mdusiołek |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Mql4 Mdusiołek"
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(60);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
}
//+------------------------------------------------------------------+
//| Tester function |
//+------------------------------------------------------------------+
double OnTester()
{
//---
double ret=0.0;
//---
//---
return(ret);
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//---
}
//+------------------------------------------------------------------+
//| Grid_Template.mq4.mq4 |
//| Mql4 Mdusiołek |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Mql4 Mdusiołek"
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(60);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
}
//+------------------------------------------------------------------+
//| Tester function |
//+------------------------------------------------------------------+
double OnTester()
{
//---
double ret=0.0;
//---
//---
return(ret);
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//---
}
//+------------------------------------------------------------------+
- ninjaproject
- Maniak
- Posty: 4944
- Rejestracja: 30 lip 2019, 13:15
Re: Wszystkie pytania dozwolone początkujących programistów
To, co zapodałeś, czyli Expert Adviser, kompiluje się bez błędu:
Proponuję sprawdzić kompatybilność MetaEditor z buildem MT4.Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.
Programuję wskaźniki i EA do MetaTrader 4/5.
- ninjaproject
- Maniak
- Posty: 4944
- Rejestracja: 30 lip 2019, 13:15
Re: Wszystkie pytania dozwolone początkujących programistów
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.
Programuję wskaźniki i EA do MetaTrader 4/5.
Re: Wszystkie pytania dozwolone początkujących programistów
//+------------------------------------------------------------------+
//| Grid_Template.mq4 |
//| Copyright 2019, DKP Sweden,CS Robots |
//| https://www.mql5.com/en/users/kenpar |
//+------------------------------------------------------------------+
//This is a simple template for grid order system in which you can add
//additional functions as you like, entry signals, trailing stop and such
//A new grid is openend as soon as expiration hours exceeded and all
//pending orders deleted that was not activated.
//Grid positions is not openend by 'new bar' rule!
//Grid positions are opened at each side of price!
//Use as you like - This is just a template!!!!!
//--------------------------------------------------------------------
#property copyright "Copyright 2019,DKP Sweden | CS Robots"
#property link "http://www.mql5.com/en/users/kenpar"
#property version "1.00"
#property description "Grid Template EA"
#property strict
//--External variables
extern int MagicNumber = 987654321;//Magic number
extern string EaComment = "Grid_Template";//Order comment
extern double StaticLot = 0.01;//Static lots size
extern bool MM = True;//Money Management
extern int Risk = 2;//Risk %
extern double TakeProfit = 20.;//Take Profit in pips
extern double StopLoss = 30.;//Stop loss in pips
extern double PriceDistance = 15.;//Distance from price in pips
extern double GridStep = 10.;//Step between grid orders in pips
extern int GridOrders = 5;//Amount of grid orders
extern int PendingExpiration = 4;//Pending expiration after xx hours
//--Internal variables
double PriceB,PriceS,StopB,StopS,
TakeB,TakeS,_points,PT,Lots;
int LotDigits;
datetime _e = 0;
int Ticket = 0;
//--
int OnInit()
{
//--Determine digits
_points=MarketInfo(Symbol(),MODE_POINT);
//--
if(Digits==5 || Digits==3)
PT = _points*10;
else
PT = _points;
//--
return(INIT_SUCCEEDED);
}
//--
void OnDeinit(const int reason)
{
}
//--
void OnTick()
{
//If trade allowed and no positions exists by any chart - open a new set of grid orders
if(IsTradeAllowed() && !IsTradeContextBusy())
{
if(PosSelect()==0)
{
GridPos(PriceDistance,TakeProfit,StopLoss);//Place grid
}
return;
}
}
///////////////////////////////////////////////////////////
//Grid order send function
void GridPos(double _Dist,double _Take,double _Stop)
{
int i;
_e=TimeCurrent()+PendingExpiration*60*60;
//--
for(i=0; i<GridOrders; i++)
{
PriceB = NormalizeDouble(Ask+(_Dist*PT)+(i*GridStep*PT),Digits);
TakeB = PriceB + _Take * PT;
StopB = PriceB - _Stop * PT;
Ticket=OrderSend(Symbol(),OP_BUYSTOP,LotSize(),PriceB,3,StopB,TakeB,EaComment,MagicNumber,_e,Green);
//--
PriceS = NormalizeDouble(Bid-(_Dist*PT)-(i*GridStep*PT),Digits);
TakeS = PriceS - _Take * PT;
StopS = PriceS + _Stop * PT;
Ticket=OrderSend(Symbol(),OP_SELLSTOP,LotSize(),PriceS,3,StopS,TakeS,EaComment,MagicNumber,_e,Red);
}
if(Ticket<1)
{
Print("Order send error - errcode: ",GetLastError());
return;
}
else
{
Print("Grid placed successfully!");
}
return;
}
//////////////////////////////////////////////////////////
//PositionSelector - Determines open positions
int PosSelect()
{
int posi=0;
for(int k = OrdersTotal() - 1; k >= 0; k--)
{
if(!OrderSelect(k, SELECT_BY_POS))
{
Print("Order pos selection failed - errcode: ",GetLastError());
}
if(OrderSymbol()!=Symbol()&&OrderMagicNumber()!=MagicNumber)
{
continue;
}
if(OrderCloseTime() == 0 && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType() == OP_BUY)
posi = 1; //Long position
if(OrderType() == OP_SELL)
posi = -1; //Short positon
if(OrderType() == OP_BUYSTOP)
posi = 1; //Pending Long position
if(OrderType() == OP_SELLSTOP)
posi = -1; //Pending Short positon
}
}
return(posi);
}
////////////////////////////////////////////////////////////
//Lots size calculation
double LotSize()
{
if(MM == true)
{ Lots = MathMin(MathMax((MathRound((AccountFreeMargin()*Risk/1000/100)
/MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP)),
MarketInfo(Symbol(),MODE_MINLOT)),MarketInfo(Symbol(),MODE_MAXLOT));}
else
{
Lots = MathMin(MathMax((MathRound(StaticLot/MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP)),
MarketInfo(Symbol(),MODE_MINLOT)),MarketInfo(Symbol(),MODE_MAXLOT));
}
return(Lots);
}
//+----------------End of Grid Template EA------------------+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// tylko ten zapisał się kompletny na XM a tamten jest gołyz bossy.
//| Grid_Template.mq4 |
//| Copyright 2019, DKP Sweden,CS Robots |
//| https://www.mql5.com/en/users/kenpar |
//+------------------------------------------------------------------+
//This is a simple template for grid order system in which you can add
//additional functions as you like, entry signals, trailing stop and such
//A new grid is openend as soon as expiration hours exceeded and all
//pending orders deleted that was not activated.
//Grid positions is not openend by 'new bar' rule!
//Grid positions are opened at each side of price!
//Use as you like - This is just a template!!!!!
//--------------------------------------------------------------------
#property copyright "Copyright 2019,DKP Sweden | CS Robots"
#property link "http://www.mql5.com/en/users/kenpar"
#property version "1.00"
#property description "Grid Template EA"
#property strict
//--External variables
extern int MagicNumber = 987654321;//Magic number
extern string EaComment = "Grid_Template";//Order comment
extern double StaticLot = 0.01;//Static lots size
extern bool MM = True;//Money Management
extern int Risk = 2;//Risk %
extern double TakeProfit = 20.;//Take Profit in pips
extern double StopLoss = 30.;//Stop loss in pips
extern double PriceDistance = 15.;//Distance from price in pips
extern double GridStep = 10.;//Step between grid orders in pips
extern int GridOrders = 5;//Amount of grid orders
extern int PendingExpiration = 4;//Pending expiration after xx hours
//--Internal variables
double PriceB,PriceS,StopB,StopS,
TakeB,TakeS,_points,PT,Lots;
int LotDigits;
datetime _e = 0;
int Ticket = 0;
//--
int OnInit()
{
//--Determine digits
_points=MarketInfo(Symbol(),MODE_POINT);
//--
if(Digits==5 || Digits==3)
PT = _points*10;
else
PT = _points;
//--
return(INIT_SUCCEEDED);
}
//--
void OnDeinit(const int reason)
{
}
//--
void OnTick()
{
//If trade allowed and no positions exists by any chart - open a new set of grid orders
if(IsTradeAllowed() && !IsTradeContextBusy())
{
if(PosSelect()==0)
{
GridPos(PriceDistance,TakeProfit,StopLoss);//Place grid
}
return;
}
}
///////////////////////////////////////////////////////////
//Grid order send function
void GridPos(double _Dist,double _Take,double _Stop)
{
int i;
_e=TimeCurrent()+PendingExpiration*60*60;
//--
for(i=0; i<GridOrders; i++)
{
PriceB = NormalizeDouble(Ask+(_Dist*PT)+(i*GridStep*PT),Digits);
TakeB = PriceB + _Take * PT;
StopB = PriceB - _Stop * PT;
Ticket=OrderSend(Symbol(),OP_BUYSTOP,LotSize(),PriceB,3,StopB,TakeB,EaComment,MagicNumber,_e,Green);
//--
PriceS = NormalizeDouble(Bid-(_Dist*PT)-(i*GridStep*PT),Digits);
TakeS = PriceS - _Take * PT;
StopS = PriceS + _Stop * PT;
Ticket=OrderSend(Symbol(),OP_SELLSTOP,LotSize(),PriceS,3,StopS,TakeS,EaComment,MagicNumber,_e,Red);
}
if(Ticket<1)
{
Print("Order send error - errcode: ",GetLastError());
return;
}
else
{
Print("Grid placed successfully!");
}
return;
}
//////////////////////////////////////////////////////////
//PositionSelector - Determines open positions
int PosSelect()
{
int posi=0;
for(int k = OrdersTotal() - 1; k >= 0; k--)
{
if(!OrderSelect(k, SELECT_BY_POS))
{
Print("Order pos selection failed - errcode: ",GetLastError());
}
if(OrderSymbol()!=Symbol()&&OrderMagicNumber()!=MagicNumber)
{
continue;
}
if(OrderCloseTime() == 0 && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType() == OP_BUY)
posi = 1; //Long position
if(OrderType() == OP_SELL)
posi = -1; //Short positon
if(OrderType() == OP_BUYSTOP)
posi = 1; //Pending Long position
if(OrderType() == OP_SELLSTOP)
posi = -1; //Pending Short positon
}
}
return(posi);
}
////////////////////////////////////////////////////////////
//Lots size calculation
double LotSize()
{
if(MM == true)
{ Lots = MathMin(MathMax((MathRound((AccountFreeMargin()*Risk/1000/100)
/MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP)),
MarketInfo(Symbol(),MODE_MINLOT)),MarketInfo(Symbol(),MODE_MAXLOT));}
else
{
Lots = MathMin(MathMax((MathRound(StaticLot/MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP)),
MarketInfo(Symbol(),MODE_MINLOT)),MarketInfo(Symbol(),MODE_MAXLOT));
}
return(Lots);
}
//+----------------End of Grid Template EA------------------+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// tylko ten zapisał się kompletny na XM a tamten jest gołyz bossy.