Как кодировать? - страница 197

 

Может ли кто-нибудь помочь в кодировании этого советника?

Здравствуйте,

В настоящее время я торгую с советником по мартингейлу, который открывает максимум 4 уровня ордеров. Я просто думаю о стратегии хеджирования, которая может уменьшить риск использования этого советника. Ниже приведено описание моей стратегии:

1. Хеджирующий советник будет следить за просадкой открываемых ордеров. Если общая сумма плавающих убытков превышает заранее определенную сумму, то советник открывает хеджированный ордер в противоположную сторону от открывающих ордеров.

2. Размер лота хеджируемого ордера рассчитывается на основе кратного (пользователь может установить кратность) размера лота последнего открывающего ордера (например, если размер лота последнего ордера уровня 1,6, а кратность установлена на 2, то хеджируемый ордер будет открыт с размером лота 3,2.

3. Когда хеджируемый ордер вернется на уровень открытия, хеджируемый ордер будет автоматически закрыт.

4. Когда общая корзина (открывающие ордера + хеджированный ордер) достигнет заранее установленной суммы чистой прибыли, все ордера будут закрыты.

Интересно, сможет ли какой-нибудь хороший программист написать для меня этот хеджирующий советник? Я думаю, что он будет очень полезен и для других советников по мартингейлу. Большое спасибо!

С наилучшими пожеланиями,

Уоллес

 

Вау...

Спасибо, ребята...

Как насчет бай стоп и селл стоп?

просто изменить "BUY" там?

просто хочу 2 позиции только для 1 пары, не больше...

простите, я еще новичок...

 

Как закодировать этот индис в советнике?

Привет, я новичок и заинтересован в изучении mql, может кто-нибудь подсказать мне, как закодировать это в советнике?

extern int Fast.MA.Period = 5;

extern int Slow.MA.Period = 34;

extern int Signal.period = 5;

//---- буферы

double Buffer1[],

Buffer2[],

b2[],

b3[];

//+------------------------------------------------------------------+

//| Пользовательская функция инициализации индикатора |

//+------------------------------------------------------------------+

int init()

{

//---- индикаторы

// два дополнительных буфера, используемых для подсчета

IndicatorBuffers(4);

IndicatorShortName("MA_5_34");

SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,3);

SetIndexArrow(0,242); // вниз 226 234 242

SetIndexBuffer(0,b2);

SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,3);

SetIndexArrow(1,241); //ВЕРХ 225 233 241

SetIndexBuffer(1,b3);

// Эти буферы не строятся, а просто используются для определения стрелок

SetIndexBuffer (2,Buffer1);

SetIndexBuffer (3,Buffer2);

//----

return(0);

}

//+------------------------------------------------------------------+

//| Функция деинициализации индикатора Custor |

//+------------------------------------------------------------------+

int deinit()

{

//----

return(0);

}

//+------------------------------------------------------------------+

//| Пользовательская итерационная функция индикатора |

//+------------------------------------------------------------------+

int start()

{

int i, counted_bars=IndicatorCounted();

double MA5,MA34;

int limit=Bars-counted_bars;

Print(" print limit = ", limit);

if(counted_bars>0) limit++; <---- может кто-нибудь объяснить мне, что это значит?

// Главная строка

for(i=0; i<limit; i++) <---- может кто-нибудь объяснить мне, что это значит?

{

MA5=iMA(NULL,0,Fast.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i);

MA34=iMA(NULL,0,Slow.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i);

Buffer1=MA5-MA34;

}

// Сигнальная линия

for(i=0; i<limit; i++) <----can someone explain to me what it means ?

{

Buffer2=iMAOnArray(Buffer1,Bars,Signal.period,0,MODE_LWMA,i);

} <---- Может кто-нибудь объяснить мне, что это значит?

// Стрелки

for(i=0; i<limit; i++)

{

if(Buffer1 > Buffer2 && Buffer1 < Buffer2)

b2 = High+10*Point;

if(Buffer1 Buffer2)

b3 = Low-10*Point; <---- может ли кто-нибудь объяснить мне, что это значит?

}

//----

return(0);

}

Спасибо ребята =^_^=

 
liew_stanley:
if(counted_bars>0) limit++; <----can someone explain to me what it means ?

// Главная строка

for(i=0; i<limit; i++) <---- Может ли кто-нибудь объяснить мне, что это значит?

// Сигнальная строка

for(i=0; i<limit; i++) <---- Может кто-нибудь объяснить мне, что это значит?

{

Buffer2=iMAOnArray(Buffer1,Bars,Signal.period,0,MODE_LWMA,i);

} <---- Может кто-нибудь объяснить мне, что это значит?

// Стрелки

for(i=0; i<limit; i++)

{

if(Buffer1 > Buffer2 && Buffer1 < Buffer2)

b2 = High+10*Point;

if(Buffer1 Buffer2)

b3 = Low-10*Point; <---- Может кто-нибудь объяснит мне, что это значит?

Спасибо, ребята =^_^=

Это просто.

Когда вы запускаете инди, Bars=1000 (например) и counted_bars=0. Таким образом, limit=1000 и ваш инди вычисляет все 1000 баров. После этого counted_bars=1000, и каждый новый тик инди рассчитывает только последний (нулевой) бар. Когда приходит следующий бар, limit=1 и инди пересчитывает два последних бара.

b3 = Low-10*Point; - это просто линия на 10 пунктов ниже минимума бара.

 
liew_stanley:
Привет, я новичок и заинтересован в изучении mql, может ли кто-нибудь сказать мне, как это закодировать в советнике?

extern int Fast.MA.Period = 5;

extern int Slow.MA.Period = 34;

extern int Signal.period = 5;

//---- буферы

double Buffer1[],

Buffer2[],

b2[],

b3[];

//+------------------------------------------------------------------+

//| Пользовательская функция инициализации индикатора |

//+------------------------------------------------------------------+

int init()

{

//---- индикаторы

// два дополнительных буфера, используемых для подсчета

IndicatorBuffers(4);

IndicatorShortName("MA_5_34");

SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,3);

SetIndexArrow(0,242); // вниз 226 234 242

SetIndexBuffer(0,b2);

SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,3);

SetIndexArrow(1,241); //ВЕРХ 225 233 241

SetIndexBuffer(1,b3);

// Эти буферы не строятся, а просто используются для определения стрелок

SetIndexBuffer (2,Buffer1);

SetIndexBuffer (3,Buffer2);

//----

return(0);

}

//+------------------------------------------------------------------+

//| Функция деинициализации индикатора Custor |

//+------------------------------------------------------------------+

int deinit()

{

//----

return(0);

}

//+------------------------------------------------------------------+

//| Пользовательская итерационная функция индикатора |

//+------------------------------------------------------------------+

int start()

{

int i, counted_bars=IndicatorCounted();

double MA5,MA34;

int limit=Bars-counted_bars;

Print(" print limit = ", limit);

if(counted_bars>0) limit++; <---- может кто-нибудь объяснить мне, что это значит?

// Главная строка

for(i=0; i<limit; i++) <---- Может кто-нибудь объяснить мне, что это значит?

{

MA5=iMA(NULL,0,Fast.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i);

MA34=iMA(NULL,0,Slow.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i);

Buffer1=MA5-MA34;

}

// Сигнальная линия

for(i=0; i<limit; i++) <---- Может кто-нибудь объяснить мне, что это значит?

{

Buffer2=iMAOnArray(Buffer1,Bars,Signal.period,0,MODE_LWMA,i);

} <---- Может кто-нибудь объяснить мне, что это значит?

// Стрелки

for(i=0; i<limit; i++)

{

if(Buffer1 > Buffer2 && Buffer1 < Buffer2)

b2 = High+10*Point;

if(Buffer1 Buffer2)

b3 = Low-10*Point; <---- может ли кто-нибудь объяснить мне, что это значит?

}

//----

return(0);

}

Спасибо, ребята =^_^=

Если вы хотите использовать этот индикатор в ea, вы можете использовать функцию icustom() для доступа к нему. Вам не нужно понимать код индикатора, только данные, которые он выдает. По крайней мере, это простой способ сделать это.

 
fxcourt:
Если вы хотите использовать этот индикатор в ea, вы можете использовать функцию icustom() для доступа к нему. Вам не нужно понимать код индикатора, только данные, которые он выдает. По крайней мере, это простой способ сделать это.

То есть, использовать функцию icustom() в советнике для вызова индизайна? Как должна быть написана кодировка в советнике? Можете подсказать?

Большое спасибо

 
toiii:
стоп...

Спасибо, ребята...

Как насчет бай стоп и селл стоп?

просто изменить "BUY" там?

Просто хочу 2 позиции только для 1 пары, не больше...

извините, я еще новичок...

Прочтите это

Самоучитель MQL4

 

Правильно ли это кодирование?

extern double TakeProfit=100;

extern double Lots=1;

extern double TrailingStop=35;

extern int ShortEma = 5;

extern int LongEma = 34;

//+------------------------------------------------------------------+

//| функция инициализации эксперта |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| функция деинициализации эксперта | |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1 , double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if(line1>line2)current_direction = 1; //up

if(line1<line2)current_direction = 2; //вниз

if(current_direction != last_direction) //changed

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (0);

}

}

//+------------------------------------------------------------------+

//| функция запуска эксперта |

//+------------------------------------------------------------------+

int start()

{

//----

int total;

double shortEma, longEma;

shortEma = iCustom(NULL,0, "Test_Demo",13,0,0);

longEma = iCustom(NULL,0, "Test_Demo",54,0,0);

Print("shortEma = " + shortEma + " : longEma = " + longEma);

int isCrossed = 0;

isCrossed = Crossed (LongEma,ShortEma);

total = OrdersTotal();

if(total < 1)

{

if(isCrossed == 1)

{

1=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "My EA",12345,0,Green);

if(1>0)

{

if(OrderSelect(1,SELECT_BY_TICKET,MODE_TRADES)) Print("Открыт ордер BUY : ",OrderOpenPrice());

}

else Print("Ошибка при открытии ордера BUY : ",GetLastError());

return(0);

}

if(isCrossed == 2)

{

2=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "My EA",12345,0,Red);

if(2>0)

{

if(OrderSelect(2,SELECT_BY_TICKET,MODE_TRADES)) Print(" Открытордер SELL: ",OrderOpenPrice());

}

else Print("Ошибка при открытии ордера SELL : ",GetLastError());

return(0);

}

return(0);

}

}

Я получил ошибку, говорящую 1 и 2 неожиданный токен, что это значит? Может ли это помочь мне?

Спасибо

 

Наверное, вы что-то удалили и забыли:

2=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"My EA",12345,0,Red); if(2>0)

это чушь.

 
liew_stanley:
extern double TakeProfit=100;

extern double Lots=1;

extern double TrailingStop=35;

я получил ошибку, говорящую, что 1 и 2 неожиданный токен, что это значит? может ли это помочь мне?

Спасибо

Удалите 1=, и 2= перед OrderSend(....).

Причина обращения: