You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
So far, just like this:
//+------------------------------------------------------------------+
//| Fibo trading.mq4 |
//| Minodi |
//| minodi@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Minodi"
#property link "minodi@yandex.ru"
extern int period_EMA = 233,
period_SMA = 233,
stoploss = 30,
extern double Lot = 0.01;
extern string SesEnd ="22:00"; //boundary time for Hai or Low
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//------- Daily Prices, Fibs and Hi-Low rendering time--------------+
int shift = iBarShift(NULL,1440,Time[0]) + 1;
double HiPrice = iHigh(NULL,1440,shift); //High price
double LoPrice = iLow(NULL,1440,shift); // low price
double OpPrice = iOpen (NULL,1440,shift); //open price
double ClPrice = iClose (NULL,1440,shift); // Closing price
datetime StTime = iTime(NULL,1440,shift); // ?
if(TimeDayOfWeek(StTime)==0/*Sunday*/)
{//Add fridays high and low
HiPrice = MathMax(HiPrice,iHigh(NULL,1440,shift+1));
LoPrice = MathMin(LoPrice,iLow(NULL,1440,shift+1));
OpPrice = iOpen(NULL,1440,shift+1);
ClPrice = iClose (NULL,1440,shift+1);
}
double Pivot =(HiPrice+LoPrice+ClPrice)/3;
double Range =HiPrice-LoPrice;
double Fibo138 =1.382*Range+LoPrice;
double Fibo162 =1.618*Range+LoPrice;
double Fibo_138 =LoPrice-(1.382*Range-Range);
double Fibo_162 =LoPrice-(1.618*Range-Range);
//---------------- HiTime and Low-----------------------------------------+
int HiTime,LoTime;
int time; // on the next bar roll the values
if (time!=Time[0]){HiTime=0;LoTime=0;time=Time[0];}
if (High[0]>HiPrice)HiTime=TimeCurrent();
if (Low[0]<LoPrice)LoTime=TimeCurrent();
Comment("On this bar: "+"\n Time High Point="+HiTime+"\n Time Low Point="+LoTime);
//-----------------Ценовой диапазон Демарка-------------------------------+
int currDay, i=0; //
if (currDay!=TimeDay(Time[i]))
{
if (ClPrice<OpPrice) double x=(HiPrice + LoPrice + LoPrice)/2;
if (ClPrice>OpPrice) x=(HiPrice + LoPrice + ClPrice + HiPrice)/2;
if (ClPrice==OpPrice) x=(HiPrice + LoPrice + ClPrice + ClPrice)/2;
i++;
}
double MaxDay = x - LoPrice; // Demark price range
double MinDay = x - HiPrice; // Demark price range
// -----------Скользящие средние---------------------------------------------+
double EMA = iMA(15,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0);
double SMA = iMA(15,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);
double EMA1 = iMA(60,0,period_EMA,0,MODE_EMA,PRICE_CLOSE,0);
double SMA1 = iMA(60,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);
//----------------Удаление вчерашних ордеров---------------------------------+
//------------------Ордера----------------------------------------------------+
Dear forum members, check the code, I plan to gradually add
These are the parameters I gave you, place them before you start
int HiTime,LoTime;
int time; // на следующем баре обнкляем значения
Вот эти параметры ято я давал, поместите перд стартом
int HiTime,LoTime;
int time; // на следующем баре обнкляем значения
Dear forum members, please pay attention and tell us what mistakes have been made:
//+------------------------------------------------------------------+
//| Fibo trading.mq4 |
//| Minodi |
//| minodi@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Minodi"
#property link "minodi@yandex.ru"
extern int period_EMA = 233,
period_SMA = 233,
stoploss = 30,
Magic = 55;
extern double Lot = 0.01;
extern string SesEnd ="22:00"; //boundary time for Hai or Low
int HiTime,LoTime;
int time; // on the next bar roll up values
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//------- Daily Prices, Fibs and Hi-Low rendering time--------------+
int shift = iBarShift(NULL,1440,Time[0]) + 1;
double HiPrice = iHigh(NULL,1440,shift); //High price
double LoPrice = iLow(NULL,1440,shift); // low price
double OpPrice = iOpen (NULL,1440,shift); //open price
double ClPrice = iClose (NULL,1440,shift); // Closing price
datetime StTime = iTime(NULL,1440,shift); // ?
if(TimeDayOfWeek(StTime)==0/*Sunday*/)
{//Add fridays high and low
HiPrice = MathMax(HiPrice,iHigh(NULL,1440,shift+1));
LoPrice = MathMin(LoPrice,iLow(NULL,1440,shift+1));
OpPrice = iOpen(NULL,1440,shift+1);
ClPrice = iClose (NULL,1440,shift+1);
}
double Pivot =(HiPrice+LoPrice+ClPrice)/3;
double Range =HiPrice-LoPrice;
double Fibo138 =1.382*Range;
double Fibo162 =1.618*Range;
double Fibo_138 =(LoPrice-1.382*Range)-Range;
double Fibo_162 =(LoPrice-1.618*Range)-Range;
//---------------- time hai and low-----------------------------------------+
if (time!=Time[0]){HiTime=0;LoTime=0;time=Time[0];}
if (High[0]>HiPrice)HiTime=TimeCurrent();
if (Low[0]<LoPrice)LoTime=TimeCurrent();
Comment("On this bar: "+"\n Time High Point="+HiTime+"\n Time Low Point="+LoTime);
//-----------------Ценовой диапазон Демарка-------------------------------+
int currDay, i=0; //
if (currDay!=TimeDay(Time[i]))
{
if (ClPrice<OpPrice) double x=(HiPrice + LoPrice + LoPrice)/2;
if (ClPrice>OpPrice) x=(HiPrice + LoPrice + ClPrice + HiPrice)/2;
if (ClPrice==OpPrice) x=(HiPrice + LoPrice + ClPrice + ClPrice)/2;
i++;
}
double MaxDay = x - LoPrice; // Demark price range
double MinDay = x - HiPrice; // Demark price range
// -----------Скользящие средние---------------------------------------------+
double EMA = iMA(15,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0);
double SMA = iMA(15,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);
double EMA1 = iMA(60,0,period_EMA,0,MODE_EMA,PRICE_CLOSE,0);
double SMA1 = iMA(60,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);
//------------------Ордера----------------------------------------------------+
if (HiTime>LoTime){
int ticket1 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,HiPrice,0,0,Pivot,NULL,Magic,58000,Red);
int ticket2 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,HiPrice,0,0,LoPrice,NULL,Magic,58000,Red);
int ticket3 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo138,0,0,HiPrice,NULL,Magic,58000,Red);
int ticket4 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo138,0,0,LoPrice,NULL,Magic,58000,Red);
int ticket5 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo162,0,0,HiPrice,NULL,Magic,58000,Red);
int ticket6 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo162,0,0,Pivot,NULL,Magic,58000,Red);
}
if (HiTime<LoTime){
int ticket7=OrderSend(Symbol(),OP_BUYLIMIT,Lot,LoPrice,0,0,Pivot,NULL,Magic,58000,Red);
int ticket8=OrderSend(Symbol(),OP_BUYLIMIT,Lot,LoPrice,0,0,HiPrice,NULL,Magic,58000,Red);
int ticket9=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_138,0,0,LoPrice,NULL,Magic,58000,Red);
int ticket10=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_138,0,0,Pivot,NULL,Magic,58000,Red);
int ticket11=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_162,0,0,LoPrice,NULL,Magic,58000,Red);
int ticket12=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_162,0,0,Pivot,NULL,Magic,58000,Red);
}
if (HiTime>LoTime && ClPrice>Pivot) {
int ticket13=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Pivot,0,0,HiPrice,NULL,Magic,58000,Red);
int ticket14=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Pivot,0,0,Fibo138,NULL,Magic,58000,Red);
}
if (HiTime<LoTime && ClPrice<Pivot)
int ticket15=OrderSend(Symbol(),OP_SELLLIMIT,Lot,Pivot,0,0,LoPrice,NULL,Magic,58000,Red);
int ticket16=OrderSend(Symbol(),OP_SELLLIMIT,Lot,Pivot,0,0,Fibo_138,NULL,Magic,58000,Red);
}
return(0);
//+------------------------------------------------------------------+
at first glance the parameters:
int currDay;
for start
Gentlemen of the forum, help to understand....
Here is a part of the code (the main code is taken from the Expert Advisor construction manual)
// Order function
// Global variables:
// Mas_Ord_New[31][9] // Array of orders last known
// Mas_Ord_Old[31][9] // Array of orders previous (old)
// 1st index = order number
// [][0] is not defined
// [][1] open order price (abs. of an order (abc rate)
// [][2] StopLoss of an order (abc rate)
// [][3] TakeProfit of an order (abc rate)
// [][4] Order number
// [][5] number of lots of an order. (Abc Rate)
// [][6] Order type 0=B,1=S,2=BL,3=SL,4=BS,5=SS
// [][7] magic number of the order
// [][8] 0/1
if (Mas_Ord_Old[old][6]==0 && Bid>Mas_Ord_Old[old][2] && Bid<Mas_Ord_Old[old][3])
Inform(1, Mas_Ord_Old[old][4]); // So the Buy order was closed by the counter signal
else if (Mas_Ord_Old[old][6]==0 && Bid<=Mas_Ord_Old[old][2])
Inform(19,Mas_Ord_Old[old][4],Mas_Ord_Old[old][2]) // it means SL has triggered
else if (Mas_Ord_Old[old][6]==0 && Bid>=Mas_Ord_Old[old][3])
Inform(20,Mas_Ord_Old[old][4],Mas_Ord_Old[old][3]) // TA triggered
else if (Mas_Ord_Old[old][6]==1 && Ask<Mas_Ord_Old[old][2] && Ask>Mas_Ord_Old[old][3])
Inform(2, Mas_Ord_Old[old][4]); // So Sell order is closed by counter signal
else if (Mas_Ord_Old[old][6]==1 && Ask>=Mas_Ord_Old[old][2])
Inform(19,Mas_Ord_Old[old][4],Mas_Ord_Old[old][2]) // it means that SL has triggered
else if (Mas_Ord_Old[old][6]==1 && Ask<=Mas_Ord_Old[old][3])
Inform(20,Mas_Ord_Old[old][4],Mas_Ord_Old[old][3]); // TA triggered
The rest is of no interest...
The problem: In 90% of cases the correct parameter is shown, i.e. if SL is triggered, the parameter is "19", if TP is "20", if order is closed manually, or by a counter signal, the parameter is "1" or "2". It was designed that way.
But sometimes (quite often) instead of "20" it returns "19" (or vice versa), or even "1"("2"). Please, help me correctly describe the "if" function: as conditions of order closing reasons.
I think the reason may be in rounding of prices?