Questions from Beginners MQL4 MT4 MetaTrader 4 - page 100
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
Hi everyone, can you please help me find an error in the code of the EA, I think I have looked through it all, it seems to be all written correctly in the code, but the program does not trade correctly for some reason! The idea is this: The advisor has to look for two long candles of the same direction (the length between the candles is adjustable in the advisor, ie between the two minimum or maximum candles, depending on the direction), if the price in the opposite direction breaks the minimum or maximum of the last candle, a deal should open (Example picture situations on the chart attached to the file). The adviser should open deals at every such suitable situation, but for some reason it opens deals only on the trading windows between days. Here is the situation, who is not difficult from programmers, please help, fix the error. EA code see below, as well as in the attached file.
//+-----------------------------------------------------------------------------------------------+
//| Spacing_Candles.mq4 |
//| Copyright 2017, Vladim |
//| vk.com/id229534564 |
//| Mail: Vladim120385@yandex.ru |
//+-----------------------------------------------------------------------------------------------+
#property copyright "Copyright 2017, Vladim"
#property link "vk.com/id229534564"
#property version "1.00"
#property strict
//--- EA parameters
extern string paramEA = ""; // Parameters EA
extern double volume = 0.01; // Volume
extern double stopLoss = 5; // StopLoss.
extern double takeProfit = 1.5; // TakeProfit
extern double maxSpacing = 150; // MaxSpacing
extern double minSpacing = 30; // MinSpacing
extern double TrailingStop = 0; // TrailingStop
extern int magic = 127; // Magic
//--- global variables
datetime newCandle;
int tip;
//+-----------------------------------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+-----------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+-----------------------------------------------------------------------------------------------+
void OnTick()
{
if(newCandle != Time[0]) FindPattern();
newCandle = Time[0];
}
//+-----------------------------------------------------------------------------------------------+
void OpenOrder(int type) // Open a market order
{
if(type == OP_BUY) if(OrderSend(_Symbol, OP_BUY, volume, Ask, 0, 0, 0, "", magic, 0)) SetSLTP(OP_BUY);
if(type == OP_SELL) if(OrderSend(_Symbol, OP_SELL, volume, Bid, 0, 0, 0, 0, "", magic, 0)) SetSLTP(OP_SELL);
}
//+-----------------------------------------------------------------------------------------------+
void SetSLTP(int type) //set stop orders
{
double sl = 0;
double tp = 0;
if(type == OP_BUY)
for(int i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol() == _Symbol && OrderMagicNumber() == magic && OrderType() == OP_BUY && OrderStopLoss() == 0)
{
sl = NormalizeDouble(Low[1] - stopLoss * _Point, _Digits);
tp = NormalizeDouble(OrderOpenPrice() + (OrderOpenPrice() - Low[1]) * takeProfit, Digits);
if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0)) return;
}
if(type == OP_SELL)
for(int i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol() == _Symbol && OrderMagicNumber() == magic && OrderType() == OP_SELL && OrderStopLoss() == 0)
{
sl = NormalizeDouble(High[1] + stopLoss * _Point, _Digits);
tp = NormalizeDouble(OrderOpenPrice() - (High[1] - OrderOpenPrice()) * takeProfit, Digits);
if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0)) return;
}
}
//+-----------------------------------------------------------------------------------------------+
void FindPattern() // Looking for long distance between candlesticks
{
if(High[1] < High[2] && Bid > High[1] && Low[1] < Low[2])
{
double spacing = NormalizeDouble((High[2] - High[1]) / _Point, 0);
if(maxSpacing >= spacing && minSpacing <= spacing)
OpenOrder(OP_BUY);
}
if(Low[1] > Low[2] && Bid < Low[1] && High[1] > High[2])
{
double spacing = NormalizeDouble((Low[1] - Low[2]) / _Point, 0);
if(maxSpacing >= spacing && minSpacing <= spacing)
OpenOrder(OP_SELL);
}
{
if(TrailingStop!=0) TrailingStop();
}
}
//+-----------------------------------------------------------------------------------------------+
void TrailingStop()
{
double StLo,OSL,OOP;
bool error=true;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS))
{
tip = OrderType();
if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
{
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
if (tip==0)
{
StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits);
if (StLo < OOP) continue;
if (StLo > OSL)
error=OrderModify(OrderTicket(),OrderOpenPrice(),StLo,OrderTakeProfit(),0,White);
}
if (tip==1)
{
StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits);
if (StLo > OOP) continue;
if (StLo < OSL || OSL==0 )
error=OrderModify(OrderTicket(),OrderOpenPrice(),StLo,OrderTakeProfit(),0,White);
}
if (!error) Alert("Error TrailingStop ",GetLastError()," ",Symbol()," SL ",StLo);
}
}
}
}
//+-----------------------------------------------------------------------------------------------+
Hi everyone, can you please help me find an error in the code of the EA, I think I have looked through it all, it seems to be all written correctly in the code, but the program does not trade correctly for some reason! The idea is this: The advisor has to look for two long candles of the same direction (the length between the candles is adjustable in the advisor, ie between the two minimum or maximum candles, depending on the direction), if the price in the opposite direction breaks the minimum or maximum of the last candle, a deal should open (Example picture situations on the chart attached to the file). The adviser should open deals at every such suitable situation, but for some reason it opens deals only on the trading windows between days. Here is the situation, who is not difficult from programmers, please help, fix the error. EA code look below and also in attached file.
Maybe enough already, you've piled up posts in every thread, and at the same time created your own.
Hi.
Can you tell me how to limit EA trading by time.
I tried a lot of methods from the forum, but nothing worked, I don't understand anything about writing.
It would be nice if you could just point the finger at what to put in.
Insert it after start. and the eXpert will trade every day at a given time interval on the terminal
Hi everyone, can you please help me find an error in the code of the EA, I think I have looked through it all, it seems to be all written correctly in the code, but the program does not trade correctly for some reason! The idea is this: The advisor has to look for two long candles of the same direction (the length between the candles is adjustable in the advisor, ie between the two minimum or maximum candles, depending on the direction), if the price in the opposite direction breaks the minimum or maximum of the last candle, a deal should open (Example picture situations on the chart attached to the file). The adviser should open deals at every such suitable situation, but for some reason it opens deals only on the trading windows between days. Here is the situation, who is not difficult from programmers, please help, fix the error. See the EA code below and also in the attached file.
check condition for buy and sell entry
Hi everyone, can you please help me find an error in the code of the EA, I think I have looked through it all, it seems to be all written correctly in the code, but the program does not trade correctly for some reason! The idea is this: The advisor has to look for two long candles of the same direction (the length between the candles is adjustable in the advisor, ie between the two minimum or maximum candles, depending on the direction), if the price in the opposite direction breaks the minimum or maximum of the last candle, a deal should open (Example picture situations on the chart attached to the file). The adviser should open deals at every such suitable situation, but for some reason it opens deals only on the trading windows between days. Here is the situation, who is not difficult from programmers, please help, fix the error. See the EA code below as well as in the attached file.
It is better to first write the part of the EA that would mark on the chart the candles found, so that everything becomes clear. And the following lines are unnecessary in your case:
Please help the community ...
*
Downloaded the Kalman Filter indicator from the forum (source code attached).
Everything is fine on the chart.
When I try to read it in Expert Advisor the following line
iValue=iCustom(NULL,timeframe,"Kalmanfilter", 4,1,1 ,0,1);
Outputs the same big number, obviously not related to the indicator:
What can it be ?
Help from the community ...
*
Downloaded the Kalman Filter indicator from the forum (source code attached).
Everything is fine on the chart.
When I try to read it in Expert Advisor the following line
iValue=iCustom(NULL,timeframe,"Kalmanfilter", 4,1,1 ,0,1);
Outputs the same big number, obviously not related to the indicator:
What can it be ?
EMPTY_VALUE
Empty value in indicator buffer
2147483647 (0x7FFFFFFFF)
EMPTY_VALUE
Empty value in indicator buffer
2147483647 (0x7FFFFFFFF)
:) I already found it ...
Why does it come out ?
:) I already found it ...
But why does it come out ?
The indicator has 2 arrays, because 2 colours. While there is a line of the first colour on the bar, the array with the second colour is equal to EMPTY_VALUE,
iValue=iCustom(NULL,timeframe, "Kalmanfilter", 4,1,1,0,1);
iValue = EMPTY_VALUE, then the line on 1 bar is orange. (because array blue = EMPTY_VALUE)
The indicator has 2 arrays because there are 2 colours. While there is a line of the first colour on the bar, the array with the second colour is equal to EMPTY_VALUE,
iValue=iCustom(NULL,timeframe, "Kalmanfilter", 4,1,1,0,1);
iValue = EMPTY_VALUE, then the line on 1 bar is orange. (Because blue array = EMPTY_VALUE)
Thanks, Nikolai...
I took from both lines.
Then I merged them into one (left one buffer). Same result.
*
I have such a question:
The indicator has draw_begin=500 variable, i.e. the number of candlesticks from the end (from the freshest candlestick) where the chart is drawn.
And when we extract the indicator value using the iCustom() method, these 500 points are counted from which candlestick ?
Why it's important - draw_begin is used not only for drawing, but also participates in calculation of indicator ...