Спрашивайте! - страница 129

 
forexarchitect:
привет ребята

У меня вопрос... как мне изменить следующее;

extern double MaxLot = 1.50;

double max_lot = GetMaxLot(OP_BUY, OP_SELL);

if (max_lot >= MaxLot) lot = CalcHedgeLot(order_type;)

(order_type)]: ", lot);

if (lot == -1) return (lot);

lot = NormalizeDouble(lot, LotPrec);

if (lot > MaxLot) lot = MaxLot;

if (lot < MinLot) lot = MinLot;

return (lot);

}

вышеописанная проверка для OP_BUY и OP_SELL

вопрос: как мне изменить это на любой OP_BUY ИЛИ любой OP_SELL

цените

Вы должны изменить код функции GetMaxLot(), или, возможно, вы можете использовать GetMaxLot(OP_BUY, OP_BUY); и GetMaxLot(OP_SELL, OP_SELL); (зависит от кода - можно сделать так или нет).

Но я думаю, что стоит попробовать.

Goen

 
Goen:
Это то, что вы ищете?

-----------

int bars_count=WindowBarsPerChart();

int bar=WindowFirstVisibleBar();

-----------

Goen

Спасибо, Гоен.

 
Goen:
Вы должны изменить код функции GetMaxLot(), или, возможно, вы можете использовать GetMaxLot(OP_BUY, OP_BUY); и GetMaxLot(OP_SELL, OP_SELL); (зависит от кода - можно сделать так или нет).

Но я думаю, что стоит попробовать.

Goen

Спасибо за ответ...

что мне нужно изменить здесь? Спасибо за помощь

double GetMaxLot(int type1, int type2)

{

double max_lot = 0.0;

int cnt = OrdersTotal();

for (int i=0; i < cnt; i++)

{

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderMagicNumber() != Magic) continue;

if (OrderType() != type1 && OrderType() != type2) continue;

if (max_lot == 0 || OrderLots() >= max_lot)

{

max_lot = OrderLots();

}

}

return (max_lot);

}

 

немного в растерянности...

 

как добавить алерт к индикатору tis?

У меня есть индикатор пересечения МА, который работает очень хорошо, но у него нет поддержки звукового оповещения, из-за чего я пропускаю много сделок, не могли бы вы научить меня, как добавить оповещение к этому индикатору, так как я ничего не знаю о мета-коде... Спасибо...

вот код для индикатора вместе с самим индикатором, спасибо...

/*[[

Имя := EMA Cross

Автор := Hapsa

Ссылка := http://www.metaquotes.net/

Отдельное окно := Нет

Отдельное окно := Нет

Первый цвет := Красный

Первый тип рисунка := Символ

Первый символ := 108

Использовать вторые данные := Да

Второй цвет := Темно-оливково-зеленый

Второй тип рисунка := Символ

Второй символ := 108

]]*/

#property copyright "Hapsa"

#property link ""

extern int SlowPeriod=20;

extern int FastPeriod=5;

#property indicator_buffers 3

#property indicator_chart_window

#property indicator_color1 Red

#property indicator_color2 Green

double L20[];

double L50[];

double shift=0,val1=0,val2=0;

int init()

{

IndicatorBuffers(3);

SetIndexStyle(0,DRAW_ARROW);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(0, 108);

SetIndexArrow(1, 108);

SetIndexBuffer(0,L20);

SetIndexBuffer(1,L50);

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

//----

return(0);

}

int start()

{

int counted_bars=IndicatorCounted();

//----

int i = Bars - counted_bars - 1;

while (i>=0)

{

val1=0;

val2=0;

double iMaSlowPrevious = iMA(NULL,0,SlowPeriod,0,MODE_EMA, PRICE_CLOSE, i-1);

double iMaSlowCurrent = iMA(NULL,0,SlowPeriod,0,MODE_EMA, PRICE_CLOSE, i);

double iMaFastPrevious = iMA(NULL,0,FastPeriod,0,MODE_EMA, PRICE_CLOSE, i-1);

double iMaFastCurrent = iMA(NULL,0,FastPeriod,0,MODE_EMA, PRICE_CLOSE, i);

if (iMaFastPreviousiMaSlowCurrent ) val1=High;

if (iMaFastPrevious>iMaSlowPrevious && iMaFastCurrent<iMaSlowCurrent ) val2=Low;

L20=val1+5*Point;

L50=val2-5*Point;

i--;

}

//----

return(0);

}

Файлы:
cross.mq4  2 kb
cross.ex4  3 kb
 
forexarchitect:
Спасибо за ответ.

что мне нужно здесь изменить? спасибо за помощь

double GetMaxLot(int type1, int type2)

{

double max_lot = 0.0;

int cnt = OrdersTotal();

for (int i=0; i < cnt; i++)

{

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderMagicNumber() != Magic) continue;

if (OrderType() != type1 && OrderType() != type2) continue;

if (max_lot == 0 || OrderLots() >= max_lot)

{

max_lot = OrderLots();

}

}

return (max_lot);

}

Да, вы можете использовать GetMaxLot(OP_BUY,OP_BUY); для получения максимального лота только для открытой сделки на покупку, и GetMaxLot(OP_SELL,OP_SELL); для получения максимального лота только для открытой сделки на продажу.

Вы можете упростить этот код "if (max_lot == 0 || OrderLots() >= max_lot)" до "if (OrderLots() > max_lot)".

Потому что если max_lot = 0, то автоматически он будет меньше любого лота открытых сделок. И знак ">=" заменить на ">", потому что если они имеют одинаковое значение, нет необходимости обновлять max_lot с тем же значением, бесполезные усилия. Он будет обновляться только если новое значение больше max_lot.

Изменив этот код, вы сможете ускорить процесс.

Goen

 

проблема со стоплоссом

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

Я новичок во всем этом форексе/метатрейдинге, но пытаюсь понять, как все это работает.

Сейчас я пытаюсь написать советника и боюсь, что упускаю что-то фундаментальное.

Если в моем коде я заменю

OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,"",MAGIC,0,Red);

на

OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+Point*10,0,"",MAGIC,0,Red);

При тестировании этой новой версии в тестере стратегий я получаю МЕНЬШЕ ордеров. Как добавление стоплосса может уменьшить количество входов ордеров? Я могу представить, что количество увеличивается в том случае, если добавление стоп-ордера заставляет ордера выходить раньше и, таким образом, новые ордера могут быть добавлены быстрее, но МЕНЬШЕ ордеров...?

Есть идеи?

Спасибо

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

Я новичок во всем этом форексе/метатрейдинге, но пытаюсь понять, как все это работает.

Сейчас я пытаюсь написать советника и боюсь, что упускаю что-то фундаментальное.

Если в моем коде я заменю

OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,"",ordercount,0,Red);

на

OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+Point*10,0,"",ordercount,0,Red);

При тестировании этой новой версии в тестере стратегий я получаю МЕНЬШЕ ордеров. Как добавление стоплосса может уменьшить количество входов ордеров? Я могу представить, что количество увеличивается в том случае, если добавление стоп-ордера заставляет ордера выходить раньше и, таким образом, новые ордера могут быть добавлены быстрее, но МЕНЬШЕ ордеров...?

Есть идеи?

Спасибо

10 пунктов может быть слишком близко к установленному брокером пределу стопа (у разных брокеров по-разному) - это означает, что если это минимум 10 пунктов, и цена случайно качнется на 1 пункт внутри этого предела в момент размещения ордера, ордер будет отклонен...

 

Omelette, вы правы, увеличение стоплосса все исправило, спасибо! :-)

 
#property indicator_color1 Magenta

#property indicator_color2 Yellow

extern bool TrendDirectionUp=true;

string Color1;

string Color2;

int init() {

if(TrendDirectionUp==true)//Conditionj 1

{

Color1=Yellow;

Color2=CLR_NONE;

}

if(TrendDirectionUp==false)//Condition2

{

Color1=CLR_NONE;

Color2=Magenta;

}

SetIndexStyle(0,DRAW_ARROW,0,star_size,Color1);

SetIndexStyle(1,DRAW_ARROW,0,star_size,Color2);

SetIndexArrow(0,172);//333

SetIndexArrow(1,172);//334

SetIndexBuffer(0,b1);

SetIndexBuffer(1,b2);

return(0);

}

Сейчас оба цвета (цвета) 1 и 2 показывают "черный" на графике!!!

Может ли любой эксперт Гуру помочь мне решить эту проблему?

Заранее спасибо!

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