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

 
ixbone:
Всем привет,

я хочу собрать все ордера (buy&sell) пары с помощью магии и если они достигают безубытка, все ордера должны быть закрыты.

любое руководство очень приветствуется, спасибо

extern bool PairBreakeven=true;// Безубыточность по паре всех ордеров одной пары/магии

extern double Pairbreakevengain=6;// прирост в пунктах, необходимый для обеспечения безубыточности

extern double Pairbreakeven=3;// безубыток, ордер закрыт, прибыль/проскальзывание 3 пункта

double Pairmovebreakeven;

if(PairBreakeven==true){

if(Pairbreakevengain>0)Pairmovebreakeven(Pairbreakevengain,Pairbreakeven);

CloseBuyOrders(Magic);

CloseSellOrders(Magic);

}

void Pairmovebreakeven(double Pairbreakevengain,double Pairbreakeven){

RefreshRates();

if(OrdersTotal()>0){

for(int i=OrdersTotal();i>=0;i++){

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic ){

return;

}

}

}

}

int CloseBuyOrders(int Magic){ //op_sell аналогично

int total=OrdersTotal();

for(int cnt=total-1;cnt>=0;cnt--){

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol()){

if(OrderType()==OP_BUY){

OrderClose(OrderTicket(),OrderLots(),Bid,3*mt);

}

}

}

return(0);

}

Основная проблема с этим кодом заключается в функции BE, она никогда не останавливается и не предпринимает никаких действий. Если вы не выражаете свое намерение словами, я не могу определить, что вы пытаетесь сделать из кода.

Вы хотите, чтобы код обнаружил все ордера на вашем счете, у которых стоп-лосс=цена открытия ордера, и закрыл их все? То есть фактически безубыточное действие выполняется другим советником? Хотел бы помочь, но не могу понять, что вы хотите сделать.

 
christinaLi:
Основная проблема с этим кодом в функции BE, она никогда не перемещает стоп и не предпринимает никаких действий. Если вы не сформулируете свое намерение словами, я не смогу определить, что вы пытаетесь сделать из кода. Вы хотите, чтобы код обнаружил все ордера на вашем счете, у которых стоп-лосс=цена открытия ордера, и закрыл их все? То есть фактически безубыточное действие выполняется другим советником? Хотел бы помочь, но не могу понять, что вы хотите сделать.

КристинаЛи,

извините, за мою неточность.

-я хочу собрать все ордера пары по магии и суммировать прибыль от всех ордеров, независимо от buy, sell, tp, sl, пример: у нас 8 ордеров buy & sell, суммированная прибыль составляет 6 пунктов // extern double Pairbreakevengain=6;// прибыль в пунктах, необходимая для обеспечения безубыточности

-если прибыль +6 пунктов для всех ордеров пары (buy&sell), все ордера (buy/sell) sl должны быть установлены stoploss на текущую цену -3 // extern double Pairbreakeven=3;// безубыток, ордер закрыт, прибыль/проскальзывание 3 пункта

-если Pairbreakevengain выпадает из прибыли всех ордеров пары пример: 8 смешанных ордеров buy/sell прибыль суммируется 6 обратно к 3, все ордера закрываются

У меня есть правильный рабочий модуль для одиночного безубытка ордера и я пытался модифицировать его самостоятельно, мне не хватает навыков работы с кодом mt4, много лет назад я изучал ассемблер...

Должен ли я выложить функцию одного безубыточного ордера?

спасибо за помощь

IX

 

Привет, IX,

Я знаю, что вы сейчас пытаетесь сделать. Это можно сделать.

Все несколько осложняется тем, что у вас могут быть покупки и продажи в одно и то же время. Потому что когда вы говорите о "текущей цене", для покупок это означает Bid, для продаж - Ask, потому что только они являются реалистичной ценой для закрытия ордеров. Таким образом, вы можете видеть, что в любой момент, когда вы настраиваете стоп-лосс для своих ордеров, покупатели и продавцы получают разную цену. Если ваш спред не постоянен, есть много шансов, что ваши ордера не будут закрыты в одно и то же время, иногда возможно, что половина ваших ордеров не будет закрыта.

Я думаю, что хороший способ сделать это - не перемещать стоп-лосс, вместо этого советник активирует память, когда общая прибыль в 6 пунктов будет достигнута, затем просто закрывает все ордера на рынке, пока общая прибыль падает до 3 пунктов. В этом случае советник заставляет закрывать ордера, они не останавливаются MT4.

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

Я знаю, что вы сейчас пытаетесь сделать. Это можно сделать.

Все несколько осложняется тем, что у вас могут быть покупки и продажи в одно и то же время. Потому что когда вы говорите о "текущей цене", для покупок это означает Bid, для продаж - Ask, потому что только они являются реалистичной ценой для закрытия ордеров. Таким образом, в любой момент времени, когда вы настраиваете стоп-лосс для своих ордеров, покупатели и продавцы получают разницу в цене. Если ваш спред не постоянен, есть много шансов, что ваши ордера не будут закрыты в одно и то же время, иногда возможно, что половина ваших ордеров не будет закрыта.

Я думаю, что хороший способ сделать это - не перемещать стоп-лосс, вместо этого советник активирует память, когда общая прибыль в 6 пунктов будет достигнута, затем просто закроет все ордера на рынке, пока общая прибыль упадет до 3 пунктов. В этом случае советник заставляет закрывать ордера, они не останавливаются MT4.

Привет, КристинаЛи,

я согласен на 100%, это слишком сложно, я понимаю, что вы имеете в виду, возможно, расчет пары (корзины) без перемещения стоплосса является решением, например:

- выбрать все ордера по паре и магии

- суммировать прибыль всех ордеров

- если сумма прибыли = 6 пунктов

- закрыть все ордера, если проскальзывания нет, то безубыток будет 6 пунктов "профита", если проскальзывание 3 пункта, то безубыток будет 3 пункта "профита".

1) преимущество: никаких проблем

2) недостаток: нет места (3 пипса) для всех ордеров, если у меня 7 бай и 6 селл хеджированных ордеров, если один бай ордер увеличивается на 6 пипсов, все ордера закрываются, есть ли возможность пометить все ордера в памяти для закрытия при достижении 6 пипсов (breakeven=true) при уменьшении на 3 пипса (6-3= 3 пипса прибыли) (breakevencloseorders=true)?

Хеджированные ордера 7buy и 6sell не могут подняться выше 6 пунктов с #1, они всегда закрываются.

В #2, 6 пунктов - это только маркер активации, при снижении до 3 пунктов, закрываем все ордера, при повышении выше 6 пунктов, например до 15 пунктов, есть пространство от +3 пунктов до 15 пунктов, что дает 12 пунктов прибыли.

спред на данный момент не рассчитывается! так как 7buys и 6sells суммируются с 2 пипсовым спредом до 26 пипсов для безубытка "0" должен быть для одного ордера на покупку и для того чтобы иметь 32 пипса с #1 и 29 пипсов с #2 для одного ордера на покупку - я прав?

спасибо за ваши предложения

IX

 
ixbone:
Привет, КристинаЛи,

я согласен на 100%, это слишком сложно, я понимаю, что вы имеете в виду, возможно, расчет пары (корзины) без перемещения стоплосса является решением, например:

- выбрать все ордера по паре и магии

- суммируем прибыль всех ордеров

- если сумма прибыли = 6 пунктов

- закрываем все ордера, если проскальзывания нет, то безубыток будет 6 пунктов "профита", если проскальзывание 3 пункта, то безубыток будет 3 пункта "профита"

1) преимущество: никаких проблем

2) недостаток: нет места (3 пипса) для всех ордеров, если у меня 7 бай и 6 селл хеджированных ордеров, если один бай ордер увеличивается на 6 пипсов, все ордера закрываются, есть ли возможность пометить все ордера в памяти для закрытия при достижении 6 пипсов (breakeven=true) при уменьшении на 3 пипса (6-3= 3 пипса прибыли) (breakevencloseorders=true)?

Хеджированные ордера 7buy и 6sell не могут подняться выше 6 пунктов с #1, они всегда закрываются.

В #2, 6 пунктов - это только маркер активации, при снижении до 3 пунктов, закрываем все ордера, при повышении выше 6 пунктов, например до 15 пунктов, есть пространство от +3 пунктов до 15 пунктов, что дает 12 пунктов прибыли.

спред на данный момент не рассчитывается! так как 7buys и 6sells суммируются с 2 пипсовым спредом до 26 пипсов для безубытка "0" должен быть для одного ордера на покупку и для того чтобы иметь 32 пипса с #1 и 29 пипсов с #2 для одного ордера на покупку - я прав?

Спасибо за ваши предложения

IX

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

 
ixbone:
Привет, КристинаЛи,

я согласен на 100%, это слишком сложно, я понимаю, что вы имеете в виду, возможно, расчет пары (корзины) без перемещения стоплосса является решением, например:

- выбрать все ордера по паре и магии

- суммируем прибыль всех ордеров

- если сумма прибыли = 6 пунктов

- закрываем все ордера, если проскальзывания нет, то безубыток будет 6 пунктов "профита", если проскальзывание 3 пункта, то безубыток будет 3 пункта "профита"

1) преимущество: никаких проблем

2) недостаток: нет места (3 пипса) для всех ордеров, если у меня 7 бай и 6 селл хеджированных ордеров, если один бай ордер увеличивается на 6 пипсов, все ордера закрываются, есть ли возможность пометить все ордера в памяти для закрытия при достижении 6 пипсов (breakeven=true) при уменьшении на 3 пипса (6-3= 3 пипса прибыли) (breakevencloseorders=true)?

Хеджированные ордера 7buy и 6sell не могут подняться выше 6 пунктов с #1, они всегда закрываются.

В #2, 6 пунктов - это только маркер активации, при снижении до 3 пунктов, закрываем все ордера, при повышении выше 6 пунктов, например до 15 пунктов, есть пространство от +3 пунктов до 15 пунктов, что дает 12 пунктов прибыли.

спред на данный момент не рассчитывается! так как 7buys и 6sells суммируются с 2 пипсовым спредом до 26 пипсов для безубытка "0" должен быть для одного ордера на покупку и для того чтобы иметь 32 пипса с #1 и 29 пипсов с #2 для одного ордера на покупку - я прав?

Спасибо за ваши предложения

IX

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

Это довольно интересно, я закодировал много подобных функций, вы можете вычислить BE интерна долларовой суммы или пипсов, но они все одного типа ордера. Это не может быть сделано как с покупками, так и с продажами. Например, если у вас есть x покупок (они могут быть разного размера лота), в какой-то момент вся долларовая прибыль, сложенная вместе, равна 0, так что теперь вы находитесь в BE. Тогда, если это покупки, если вы хотите получить 3 пункта прибыли, то просто прибавьте 3 пункта к текущему Bid, тогда у вас будет целевая цена. Если все продажи, то вычтите 3 пункта из текущего Ask, тогда у вас будет целевая цена. Но если у вас есть и покупки, и продажи, что вы делаете: прибавляете или вычитаете?

Как вы определите, что у вас есть 3 пункта прибыли в следующей ситуации? 1 лот купить по 1.4100, 2 лота продать по 1.4150?

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

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

Спасибо, Кристина,

я очень ценю ваши знания!

Майкл

 
christinaLi:
На самом деле, теперь, когда я подумал об этом немного больше, то, что вы просили, не может быть сделано.

Это довольно интересно, я закодировал много похожих функций, вы можете вычислить BE интерна долларовой суммы или пунктов, но все они одного типа ордера. Это не может быть сделано как с покупками, так и с продажами. Например, если у вас есть x покупок (они могут быть разного размера лота), в какой-то момент вся долларовая прибыль, сложенная вместе, равна 0, так что теперь вы находитесь в BE. Тогда, если это покупки, если вы хотите получить 3 пункта прибыли, то просто прибавьте 3 пункта к текущему Bid, тогда у вас будет целевая цена. Если все продажи, то вычтите 3 пункта из текущего Ask, тогда у вас будет целевая цена. Но если у вас есть и покупки, и продажи, что вы делаете: прибавляете или вычитаете?

Как вы определите, что у вас есть 3 пункта прибыли в следующей ситуации? 1 лот покупаем по 1.4100, 2 лота продаем по 1.4150?

Единственное, что можно сделать, это использовать долларовую прибыль, а не прибыль в пунктах.

Кристина,

Добавлять или вычитать не имеет значения, потому что сумма лотов 7 ордеров на покупку против 6 ордеров на продажу достаточна для достижения нормальной прибыли, BE для всех ордеров пары должен работать как защитная функция:

С этой функцией хеджирования, вы экономите много маржи, с шагом между 50 пунктами, ваш счет не может быть стерт, если нормальная прибыль не достигнута, BE должен закрыть все ордера и начать с нового сигнала и первого ордера.

Для сигналов покупки/продажи я использую Price Action.

Файлы:
unbenannt.png  7 kb
 
ixbone:
Кристина,

Добавлять или убавлять не имеет значения, потому что сумма лота 7 ордеров на покупку против 6 ордеров на продажу достаточна для достижения нормальной прибыли, BE для всех ордеров пары должен работать как защитная функция:

С этой функцией хеджирования, вы экономите много маржи, с шагом между 50 пунктами, ваш счет не может быть стерт, если нормальная прибыль не достигнута, BE должен закрыть все ордера и начать с нового сигнала и первого ордера.

Для сигналов покупки/продажи я использую Price Action.

Дополнительная информация:

- Я торгую 8-10 основными валютами одновременно для диверсификации (частично корреляции), поэтому лучше торговать 10 парами с 0.01, чем одной парой с 0.1.

- Я удваиваю шаги между ордерами на 25, 50, 100, 200, 400,

пример:

1-й ордер 1.5000

2-й ордер 1.5025

3-й.........1.050

4-й.........1.100

и так далее

 

Я хотел бы помочь с этой функцией, о которой вы говорите, но, похоже, я не могу просто понять вашу логику. Это действительно не имеет никакого отношения к другой логике стратегии.

Я просто хотел бы знать следующее.

Если у вас есть 1 лот на покупку по цене 1.4110 и 2 лота на продажу по цене 1.4200. По какой цене вы думаете, что у вас есть 6 пунктов прибыли?