angevoyageur: Покажите реальный код того, что вы пытаетесь сделать, пожалуйста.
Я все еще работаю над этим, сэр, когда вы повторите мой пост, я напишу, над чем я работаю,
//+------------------------------------------------------------------+//| Bolinger_Width_EA.mq5 |//| Copyright 2013, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2013, MetaQuotes Software Corp."#property link "http://www.mql5.com"#property version "1.00"//--- input parametersinputint bands_period= 20; // Bollinger Bands periodinputint bands_shift = 0; // Bollinger Bands shiftinputdouble deviation= 2; // Standard deviationinputdouble Lot=1; // Lots to tradeinputENUM_APPLIED_PRICE applied_price=PRICE_CLOSE; //type of price or handle//--- global variablesint BolBandsHandle; // Bolinger Bands handledouble iBBUp[],iBBLow[],iBBMidle[]; // dynamic arrays for numerical values of Bollinger Bandsdouble width;
double inputs[]; // array for storing inputsdouble weight[20]; // array for storing weights//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- Do we have sufficient bars to workif(Bars(_Symbol,_Period)<60) // total number of bars is less than 60?
{
Alert("We have less than 60 bars on the chart, an Expert Advisor terminated!!");
return(-1);
}
//--- get handle of the Bollinger Bands and Width indicators
BolBandsHandle=iBands(NULL,PERIOD_M1,bands_period,bands_shift,deviation,PRICE_CLOSE);
//--- Check for Invalid Handleif(BolBandsHandle<0)
{
Alert("Error in creation of indicators - error: ",GetLastError(),"!!");
return(-1);
}
return(0);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- release indicator handlesIndicatorRelease(BolBandsHandle);
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//--- we will use the static Old_Time variable to serve the bar time.//--- at each OnTick execution we will check the current bar time with the saved one.//--- if the bar time isn't equal to the saved time, it indicates that we have a new tick.staticdatetime Old_Time;
datetime New_Time[1];
bool IsNewBar=false;
//--- copying the last bar time to the element New_Time[0]int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
if(copied>0) // ok, the data has been copied successfully
{
if(Old_Time!=New_Time[0]) // if old time isn't equal to new bar time
{
IsNewBar=true; // if it isn't a first call, the new bar has appearedif(MQL5InfoInteger(MQL5_DEBUGGING)) Print("We have new bar here ",New_Time[0]," old time was ",Old_Time);
Old_Time=New_Time[0]; // saving bar time
}
}
else
{
Alert("Error in copying historical times data, error =",GetLastError());
ResetLastError();
return;
}
//--- EA should only check for new trade if we have a new barif(IsNewBar==false)
{
return;
}
//--- do we have enough bars to work withint Mybars=Bars(_Symbol,_Period);
if(Mybars<60) // if total bars is less than 60 bars
{
Alert("We have less than 60 bars, EA will now exit!!");
return;
}
MqlRates mrate[]; // To be used to store the prices, volumes and spread of each bar /*
Let's make sure our arrays values for the Rates and Indicators
is stored serially similar to the timeseries array
*/// the rates arraysArraySetAsSeries(mrate,true);
// the indicator arraysArraySetAsSeries(iBBUp,true);
ArraySetAsSeries(iBBLow,true);
ArraySetAsSeries(iBBMidle,true);
//--- Get the details of the latest 3 barsif(CopyRates(_Symbol,_Period,0,3,mrate)<0)
{
Alert("Error copying rates/history data - error:",GetLastError(),"!!");
return;
}
int err1=0;
err1=CopyBuffer(BolBandsHandle,0,0,3,iBBMidle) || CopyBuffer(BolBandsHandle,1,0,3,iBBUp)
|| CopyBuffer(BolBandsHandle,2,0,3,iBBLow);
if(err1<0 )
{
Print("Failed to copy data from the indicator buffer");
return;
}
double d1=-1.0; //lower limit of the normalization rangedouble d2=1.0; //upper limit of the normalization rangedouble x_min=MathMin(iBBMidle[ArrayMinimum(iBBMidle)],iBBUp[ArrayMinimum(iBBUp)],iBBLow[ArrayMinimum(iBBLow)]); //minimum value over the rangedouble x_max=MathMax(iBBMidle[ArrayMaximum(iBBMidle)],iBBUp[ArrayMaximum(iBBUp)],iBBLow[ArrayMaximum(iBBLow)]); //minimum value ovefor(int i=0;i<ArraySize(inputs);i++)
{
inputs[i]=(((((iBBUp[i]-iBBLow[i])/iBBMidle[i])-x_min)*(d2-d1))/(x_max-x_min))+d1;
}
//--- store the neuron calculation result in the out variable
out=(inputs,weight);
double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK); // Ask pricedouble Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID); // Bid price//--- Declare bool type variables to hold our Buy and Sell Conditionsbool Buy_Condition =(mrate[1].close > iBBUp[1] && mrate[1].open < iBBUp[1] && // White (bull) candle crossed the Lower Band from below to above
(iBBUp[0] - iBBLow[0])>(iBBUp[1] - iBBLow[1]) && (iBBUp[1] - iBBLow[1])>(iBBUp[2] - iBBLow[2])); // and Width is growing upbool Sell_Condition = (mrate[1].close < iBBLow[1] && mrate[1].open > iBBLow[1] && // Black (bear) candle crossed the Upper Band from above to below
(iBBUp[0] - iBBLow[0])>(iBBUp[1] - iBBLow[1]) && (iBBUp[1] - iBBLow[1])>(iBBUp[2] - iBBLow[2]));// and Width is falling downbool Buy_Close=(mrate[1].close<iBBMidle[1] && mrate[1].open>iBBMidle[1]); // Black candle crossed the Upper Band from above to belowbool Sell_Close=(mrate[1].close>iBBMidle[1] && mrate[1].open<iBBMidle[1]); // White candle crossed the Lower Band from below to aboveif(Buy_Condition && !PositionSelect(_Symbol)) // Open long position
{ // Width is growing up
LongPositionOpen(); // and white candle crossed the Lower Band from below to above
}
if(Sell_Condition && !PositionSelect(_Symbol)) // Open short position
{ // Width is falling down
ShortPositionOpen(); // and Black candle crossed the Upper Band from above to below
}
if(Buy_Close && PositionSelect(_Symbol)) // Close long position
{ // Black candle crossed the Upper Band from above to below
LongPositionClose();
}
if(Sell_Close && PositionSelect(_Symbol)) // Close short position
{ // White candle crossed the Lower Band from below to above
ShortPositionClose();
}
return;
}
//+------------------------------------------------------------------+//| Open Long position |//+------------------------------------------------------------------+void LongPositionOpen()
{
MqlTradeRequest mrequest; // Will be used for trade requestsMqlTradeResult mresult; // Will be used for results of trade requestsZeroMemory(mrequest);
ZeroMemory(mresult);
double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK); // Ask pricedouble Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID); // Bid priceif(!PositionSelect(_Symbol))
{
mrequest.action = TRADE_ACTION_DEAL; // Immediate order execution
mrequest.price = NormalizeDouble(Ask,_Digits); // Lastest Ask price
mrequest.sl = 0; // Stop Loss
mrequest.tp = 0; // Take Profit
mrequest.symbol = _Symbol; // Symbol
mrequest.volume = Lot; // Number of lots to trade
mrequest.magic = 0; // Magic Number
mrequest.type = ORDER_TYPE_BUY; // Buy Order
mrequest.type_filling = ORDER_FILLING_FOK; // Order execution type
mrequest.deviation=5; // Deviation from current priceOrderSend(mrequest,mresult); // Send order
}
}
//+------------------------------------------------------------------+//| Open Short position |//+------------------------------------------------------------------+void ShortPositionOpen()
{
MqlTradeRequest mrequest; // Will be used for trade requestsMqlTradeResult mresult; // Will be used for results of trade requestsZeroMemory(mrequest);
ZeroMemory(mresult);
double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK); // Ask pricedouble Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID); // Bid priceif(!PositionSelect(_Symbol))
{
mrequest.action = TRADE_ACTION_DEAL; // Immediate order execution
mrequest.price = NormalizeDouble(Bid,_Digits); // Lastest Bid price
mrequest.sl = 0; // Stop Loss
mrequest.tp = 0; // Take Profit
mrequest.symbol = _Symbol; // Symbol
mrequest.volume = Lot; // Number of lots to trade
mrequest.magic = 0; // Magic Number
mrequest.type= ORDER_TYPE_SELL; // Sell order
mrequest.type_filling = ORDER_FILLING_FOK; // Order execution type
mrequest.deviation=5; // Deviation from current priceOrderSend(mrequest,mresult); // Send order
}
}
//+------------------------------------------------------------------+//| Close Long position |//+------------------------------------------------------------------+void LongPositionClose()
{
MqlTradeRequest mrequest; // Will be used for trade requestsMqlTradeResult mresult; // Will be used for results of trade requestsZeroMemory(mrequest);
ZeroMemory(mresult);
double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK); // Ask pricedouble Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID); // Bid priceif(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
mrequest.action = TRADE_ACTION_DEAL; // Immediate order execution
mrequest.price = NormalizeDouble(Bid,_Digits); // Lastest Bid price
mrequest.sl = 0; // Stop Loss
mrequest.tp = 0; // Take Profit
mrequest.symbol = _Symbol; // Symbol
mrequest.volume = Lot; // Number of lots to trade
mrequest.magic = 0; // Magic Number
mrequest.type= ORDER_TYPE_SELL; // Sell order
mrequest.type_filling = ORDER_FILLING_FOK; // Order execution type
mrequest.deviation=5; // Deviation from current priceOrderSend(mrequest,mresult); // Send order
}
}
//+------------------------------------------------------------------+//| Close Short position |//+------------------------------------------------------------------+void ShortPositionClose()
{
MqlTradeRequest mrequest; // Will be used for trade requestsMqlTradeResult mresult; // Will be used for results of trade requestsZeroMemory(mrequest);
ZeroMemory(mresult);
double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK); // Ask pricedouble Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID); // Bid priceif(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
mrequest.action = TRADE_ACTION_DEAL; // Immediate order execution
mrequest.price = NormalizeDouble(Ask,_Digits); // Latest ask price
mrequest.sl = 0; // Stop Loss
mrequest.tp = 0; // Take Profit
mrequest.symbol = _Symbol; // Symbol
mrequest.volume = Lot; // Number of lots to trade
mrequest.magic = 0; // Magic Number
mrequest.type = ORDER_TYPE_BUY; // Buy order
mrequest.type_filling = ORDER_FILLING_FOK; // Order execution type
mrequest.deviation=5; // Deviation from current priceOrderSend(mrequest,mresult); // Send order
}
}
//+------------------------------------------------------------------+
Функция MathMax возвращает максимальное значение из двух значений.
Функция MathMin возвращает минимальное значение двух величи н.
Да, вы правы,
Я хочу сделать iBBUp-IBBLow/iBBMiddle,
затем назвать это шириной, значения возвращаются к ширине, если значение увеличивается, например: ширина>0 - открытие на покупку (прорыв вверх), ширина<0 - открытие на продажу (прорыв вниз).
Я не знаю точного кода, как это реализовать.
Я пытаюсь закодировать его с помощью метода nural network.
затем назвать это шириной, значения возвращаются к ширине, если значение увеличивается, например: ширина>0 - покупка открыта (прорыв вверх), ширина<0 - продажа открыта (прорыв вниз).
Я не знаю точного кода, как это реализовать.
Я пытаюсь закодировать его с помощью метода nural network.
затем назвать это шириной, значения возвращаются к ширине, если значение увеличивается, например: ширина>0 - покупка открыта (прорыв вверх), ширина<0 - продажа открыта (прорыв вниз).
Я не знаю точного кода, как это реализовать.
Я пытаюсь закодировать его с помощью метода nural network.
Как это реализовать, пожалуйста, помогите.
Какое отношение имеет нейронная сеть к вашей "ширине"? Трудно следить за вами.
Извините за некоторые орфографические ошибки,
Мне нужна ширина полосы, для этого нужно произвести некоторые вычисления, например
Width=(upperband-lowerband)/baseband
Можно ли сделать этот расчет внутри ea?
Как это определить? При попытке я получаю ошибку,
Width[]=(Upperband[ ]-Lowerband[ ])/Baseband[ ],
пожалуйста, посоветуйте
Покажите реальный код того, что вы пытаетесь сделать, пожалуйста.
Я все еще работаю над этим, сэр, когда вы повторите мой пост, я напишу, над чем я работаю,
Я пытался понять документацию по математическим функциям, но не смог найти нужную, потому что не знаю, какую из них использовать.
Я пробовал один за другим в течение многих часов, не могли бы вы показать мне правильный метод?
Я пытался понять Docs в математических функциях, но не смог найти правильный метод, потому что не знаю, какой из них мне следует использовать.
Я пробовал один за другим в течение многих часов, можете ли вы показать мне правильный метод?
Привет
Функция MathMax возвращает максимальное значение из двух значений.
Функция MathMin возвращает минимальное значение двух величи н.
Привет
Функция MathMax возвращает максимальное значение из двух значений.
Функция MathMin возвращает минимальное значение двух величи н.
Привет
Функция MathMax возвращает максимальное значение из двух значений.
Функция MathMin возвращает минимальное значение двух величи н.
Да, вы правы,
Я хочу сделать iBBUp-IBBLow/iBBMiddle,
затем назвать это шириной, значения возвращаются к ширине, если значение увеличивается, например: ширина>0 - открытие на покупку (прорыв вверх), ширина<0 - открытие на продажу (прорыв вниз).
Я не знаю точного кода, как это реализовать.
Я пытаюсь закодировать его с помощью метода nural network.
Как это реализовать, пожалуйста, помогите.
Да, вы правы,
Я хочу сделать iBBUp-IBBLow/iBBMiddle,
затем назвать это шириной, значения возвращаются к ширине, если значение увеличивается, например: ширина>0 - покупка открыта (прорыв вверх), ширина<0 - продажа открыта (прорыв вниз).
Я не знаю точного кода, как это реализовать.
Я пытаюсь закодировать его с помощью метода nural network.
Как это реализовать, пожалуйста, помогите.
Да, вы правы,
я хочу сделать iBBUp-IBBLow/iBBMiddle,
затем назвать это шириной, значения возвращаются к ширине, если значение увеличивается, например: ширина>0 - покупка открыта (прорыв вверх), ширина<0 - продажа открыта (прорыв вниз).
Я не знаю точного кода, как это реализовать.
Я пытаюсь закодировать его с помощью метода nural network.
Как это реализовать, пожалуйста, помогите.