Fractal Break Out-Stuck

 

Привет, ребята,


Я пытаюсь сделать фрактальный пробойный советник, который фильтруется по времени суток и скользящей средней.


Может ли кто-нибудь направить меня в правильном направлении/отметить какие-либо недочеты в коде?


1: Он принимает покупки только после того, как я ввожу iFractal().

2: Он не вводит данные о том, где находятся фракталы.

//+------------------------------------------------------------------+
//|                                                    Simple EA.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//Literally copying Ferrus Format to a tee

extern string Label1="===General Trade Settings===";
extern int   TakeProfit=25;
extern int    StopLoss=10;
extern int    TrailingStop=0;
extern int    Slippage=2;
extern double  Lots=0.1;
//---------Time Filter--------//

//-----------Money Managerment---------//
extern bool Money.Management=true ;
extern double Risk=1;


//----------------------Moving Average-----//
extern string Label5="===Moving Average Settings===";
extern int    MA_Period=200;
extern int    MA_Shift=0;
extern int    MA_Type=1;
extern int    MA_Price=0;
//----------


//-------Initialize EA Orders Accounting-----//


int start()
{

int mypoint;

if (Digits==3||Digits==5){ mypoint=10;}
else {mypoint=1;}


//------------Orders Accounting---------//

 int total = OrdersTotal();
if(total<1)
{
//------------Money Management----------//

//Money Management sequence
 if (Money.Management)
   {
      if (Risk<1 || Risk>1000)
      {
         Comment("Invalid Risk Value.");
         return(0);
      }
      else
      {
         Lots=MathFloor((AccountFreeMargin()*AccountLeverage()*Risk*Point*mypoint*100)/(Ask*MarketInfo(Symbol(),MODE_LOTSIZE)*MarketInfo(Symbol(),MODE_MINLOT)))*MarketInfo(Symbol(),MODE_MINLOT);
      }
   }

//-------------EMA SETTINGS-----------------//
//
//------------------------------------------//
double EMA=iMA(NULL,0,MA_Period,MA_Shift,MA_Type,MA_Price,0);
double BarCloseB;
double BarCloseS;
BarCloseB=Bid;
BarCloseS=Ask;
//----Processing a buy---------//
//


double fractalU=iFractals(NULL,0,1,0);
double fractalD=iFractals(NULL,0,2,0);



//-----------------------------//
if((BarCloseB>EMA) && (BarCloseB>=fractalU))
{
double SLB=Bid-StopLoss*Point*mypoint;
double TPB=Bid+TakeProfit*Point*mypoint;
int buy= OrderSend(Symbol(),0,Lots,Ask,Slippage,0,0);
}

if(buy>0) 
{
OrderSelect(buy,SELECT_BY_TICKET,MODE_TRADES);
OrderModify(buy,OrderOpenPrice(),SLB,TPB,0,Green);
}
//---------Processing a sell---------//
//
//-----------------------------------//
if((BarCloseS<EMA)&&(BarCloseS<=fractalD))
{
double SLS=Ask+StopLoss*Point*mypoint;
double TPS=Ask-TakeProfit*Point*mypoint;

int sell= OrderSend(Symbol(),1,Lots,Bid,Slippage,0,0);
}

if (sell>0)
{
OrderSelect(sell,SELECT_BY_TICKET,MODE_TRADES);
OrderModify(sell,OrderOpenPrice(),SLS,TPB,0,Green);
}

Print(GetLastError());
return(0);
}
}
 
фрактал

Break Out ??

double fractalU=iFractals(NULL,0,1,0);     //What if you had chosen for bar 1  ??
double fractalD=iFractals(NULL,0,2,0);             //then i think you will get sell trades also

считайте свои сделки, прежде чем открывать новую....

и другие ошибки, но сначала попробуйте это


 
deVries:
фрактал

Break Out ??

считайте свои сделки, прежде чем открывать новую....

и другие ошибки, но сначала попробуйте это



Привет, ДеВрис,


Мне трудно понять это заявление. Я понял следующее:


1)Вы хотите, чтобы я выбрал первый бар?

2) Переделать мой OrdersAccounting


Еще раз спасибо за поддержку.

 
ZacharyRC:

Привет, ДеВрис,


Мне трудно понять это заявление. Я понял следующее:


1) Вы хотите, чтобы я выбрал первый бар?

2) Переделайте мой OrdersAccounting.


Еще раз спасибо за поддержку.


double fractalU=iFractals(NULL,0,1,0);

возвраты смотрите в моем следующем посте .....

double fractalU=iFractals(NULL,0,1,1);

возврат смотрите мой следующий пост......

ваш учет ордеров как

 int total = OrdersTotal();
if(total<1)
{
 

будет давать ситуации, когда ордер не открывается, если у вас открыта или отложена другая сделка не от этого советника.

При бэктестинге вы этого не увидите, но запустив советника на счете, вы заметите.

 

Сделал небольшой тест на вашем frctal коде

вот так

   double fractalU;
   for(int y=0;fractalU < Point;y++)
     {
      fractalU=iFractals(NULL,0,1,y);
      Alert("fractalUp  y =  "+y+ " "+fractalU);
     }

Сделайте то же самое, и вы увидите, какой бар нужно выбрать для получения правильного фракталбара

 
deVries:

Сделал небольшой тест на вашем frctal коде

вот так

Сделайте то же самое, и вы увидите, какой бар нужно выбрать, чтобы получить правильный фракталбар


Привет, deVries!



Вы очень отзывчивый парень!

 
deVries:

Сделал небольшой тест на вашем frctal коде

вот так

Сделайте то же самое, и вы увидите, какой бар вам нужно выбрать для получения правильного фрактального бара


Хммм...


deVries, проверка сработала отлично и оповестила о правильной цене для каждого фрактала "вниз" и фрактала "вверх".


Я все еще исследую код на наличие ошибок, потому что он "игнорирует" фракталы при обработке ордера.


Вы правы, мне нужно изменить секции OrdersAccounting, потому что как только я помещаю советника на график, он совершает сделку.

 
deVries:

Сделал небольшой тест на вашем фрктальном коде

вот так

Сделайте то же самое, и вы увидите, какой бар нужно выбрать для получения правильного фракталбара


ГЛУПЫЙ Я!


После исследования кода, я использовал => вместо ==, что вызывало проблемы с буфером.


Спасибо deVries!!!!

 
ZacharyRC:

ГЛУПАЯ Я!


После изучения кода, я использовал => вместо ==, что вызывало проблемы с буфером.


Спасибо deVries!!!!

Вы имеете в виду _______......
if((BarCloseB>EMA) && (BarCloseB>=fractalU))
изменён на
if((BarCloseB>EMA) && (BarCloseB==fractalU))

теперь ???? это тоже будет не корректно.

.

Что-то вроде этого

if((BarCloseB>EMA) && (BarCloseB>fractalU)&& fractalU>Point)

может сработать для вас и получить fractalU так, как вы видите его в тесте...

 
deVries:
Вы имеете в видуCOPY00
изменён на

сейчас ???? это тоже будет не правильно.

.

Что-то вроде этого

может сработать для вас и получить фракталU так, как вы видите его в тесте...


Я не реализовал ваш вход, потому что он торгует правильно в это время. Я попробую это позже сегодня вечером с вашим вводом.



Спасибо, deVries!

 

Привет, deVries:


Я сталкиваюсь с проблемами в моем окончательном коде, когда пытаюсь поставить модифицированный стоп-лосс в безубыток после такого количества пунктов.


Вы видите какую-нибудь очевидную ошибку?

extern int    StopLoss=10;

//-------------------------------------------------//
extern bool Move.BE=true;
extern int  MoveStopTo=1;



//----------------------------------------------//
//-----------------EXITING ORDERS---------------//
if(OrdersTotal()>1)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==(OP_BUY)&&(Move.BE))
{
if(Bid - OrderOpenPrice() >= Point * StopLoss)
 {
    if(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo)
     {
     OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red);
}
}
}
}

if(OrdersTotal()>1)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
{
 if(OrderType()==(OP_SELL)&&(Move.BE))
 {     
          
if(OrderOpenPrice() - Ask >= Point * StopLoss) 
 {
    if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) 
     {
      OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);
}
}
}
}
//--------CHECKING FOR ERRORS-------------------//
Print(GetLastError());
return(0);
}
}