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

 

Я тестировал его в течение 20 дней и, похоже, потерял деньги.

Я буду тестировать в течение года, посмотрим.

но прежде всего мне нужно знать, могу ли я изменять время, просто меняя значения в строках extern begin и extern end?

 

Также я заметил, что советник совершает сделки несколько раз в день. Поэтому мы должны сказать эксперту, чтобы он совершал только одну сделку при первом прорыве из этого диапазона Min-Max -/+ 5 пунктов. Также мы должны включить трейлинг-стоп вместо простого стоп-лосса.

Также вопрос по поводу цифр. Разве 300 не равно 300 пунктам? Нам нужно, чтобы стоп был 30 пунктов, а тейк-профит 50 пунктов. Также что означает magis = 123?

тот же вопрос по этому if(Bid<=(low-0.005)) 0.005 это не 50 пипсов?

не extern double stopLoss = 300.0;

extern double takeProfit = 500.0;

extern string Begin="02:00";

extern string End="10:00";

extern double distance = 80;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double low;

double high;

extern double lots = 0.1;

int magic = 123;

int slippage = 1;

string comment = "";

int ticket;

 
Avasys:
Также я заметил, что советник совершает сделки несколько раз в день. Поэтому мы должны сказать советнику, чтобы он совершал только одну сделку при первом прорыве из этого диапазона Min-Max -/+ 5 пунктов. Также мы должны включить трейлинг-стоп вместо простого стоп-лосса.

Также вопрос о числах. Разве 300 не равно 300 пунктам? Нам нужно, чтобы стоп был 30 пунктов, а тейк-профит 50 пунктов. Также что означает magis = 123?

тот же вопрос по этому if(Bid<=(low-0.005)) 0.005 это не 50 пунктов?

не extern double stopLoss = 300.0;

extern double takeProfit = 500.0;

extern string Begin="02:00";

extern string End="10:00";

extern double distance = 80;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double low;

double high;

extern double lots = 0.1;

int magic = 123;

int slippage = 1;

string comment = "";

int ticket;

[lang=pl]Вы правы, здесь должно быть 0.0005 вместо 0.005. 300 и 500 - это потому что я использую пятизначный брокер, это значит 300 пунктов, значит 30 пунктов.

Пожалуйста, скажите мне, какой трейлинг стоп вам нужен? Насчет магического числа. Как вы можете видеть, я изменил магическое число, если вам не нравится 123 [/lang].

Файлы:
simple_ea.mq4  4 kb
 
g.pociejewski:
[lang=pl]Вы правы, там должно быть 0.0005 вместо 0.005. 300 и 500 - это потому что я использую пятизначного брокера, это значит 300 пунктов, значит 30 пунктов. Пожалуйста, скажите мне, какой трейлинг стоп вам нужен? Насчет магического числа. Как вы видите, я изменил магическое число, если вам не нравится 123 [/lang].

Спасибо

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

Также относительно EURJPY, поскольку это валюта с высокой стоимостью, я все еще использую ту же нумерацию или я перехожу на 00?

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

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

Так что если я изменю здесь:

extern double stopLoss = 300.0; (Я использую 4-х значного брокера, поэтому, должен ли я изменить это?)

extern double takeProfit = 500.0;

extern string Begin="0:00"; (что произойдет, если я хочу сделать временной диапазон 22:00 предыдущего дня и 06:00 текущего дня?)

extern string End="08:15";

extern double distance = 60;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double low;

double high;

extern double lots = 0.1;

int magic = 123;

int slippage = 1;

string comment = "";

int ticket;

также что если я изменю следующее

if(Bid<=(low-0.005))

Это ведь не повлияет на функциональность кода?

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

 

Еще раз здравствуйте

ОК, я выяснил, что расстояние должно быть не 80 для пар типа GBPUSD, которые имеют более низкую стоимость, чем пары JPY, поэтому в случае пар JPY расстояние должно быть в 10 раз больше, чем для пар с низкой стоимостью.

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

Так возможно ли, что если советник вошел в позицию, то эта позиция должна быть только одна в этот день?

спасибо

Также, что означает следующее:

int slippage = 1;

string comment = "";

int ticket;

и еще, могу ли я добавить скрипт в советник и при выполнении сделки он будет отправлен мне по смс или электронной почте?

спасибо

 

StopTrading на сегодня, если один ордер находится в списке истории

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

может кто-нибудь подскажет, как мне поступить:

- Ордер исполнен, закрыт в прибыль или убыток и занесен в историю.

- теперь я хочу отключить торговлю/остановить открытие новых ордеров по этой паре (символу) на весь день

- на следующий день новый ордер может быть исполнен

Это похоже на функцию"Max Trades Per Bar", но основанную на истории.

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

пример:

1 2008.01.07 02:36 sell 1 0.10 1.4730 0.0000 0.0000 0.00 10000.00

2 2008.01.07 03:14 close 1 0.10 1.4714 0.0000 0.0000 16.00 10016.00

3 2008.01.07 03:14 sell 2 0.10 1.4712 0.0000 0.0000 0.00 10016.00

4 2008.01.07 07:54 close 2 0.10 1.4672 0.0000 0.0000 40.00 10056.00

5 2008.01.07 07:54 sell 3 0.10 1.4671 0.0000 0.0000 0.00 10056.00

6 2008.01.09 15:56 close 3 0.10 1.4663 0.0000 0.0000 7.04 10063.04

7 2008.01.10 14:24 buy 4 0.10 1.4708 0.0000 0.0000 0.00 10063.04

8 2008.01.10 14:47 close 4 0.10 1.4748 0.0000 0.0000 40.50 10103.54

любая помощь будет очень признательна

с уважением

Майкл

 
ixbone:
Привет,

может кто-нибудь подскажет, что мне делать?

- Ордер исполнен, закрыт в прибыль или убыток и занесен в историю.

- теперь я хочу отключить торговлю/остановить открытие новых ордеров по этой паре (символу) на весь день

- на следующий день новый ордер может быть исполнен

Это похоже на функцию "Max Trades Per Bar", но основанную на истории.

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

пример:

1 2008.01.07 02:36 sell 1 0.10 1.4730 0.0000 0.0000 0.00 10000.00

2 2008.01.07 03:14 close 1 0.10 1.4714 0.0000 0.0000 16.00 10016.00

3 2008.01.07 03:14 sell 2 0.10 1.4712 0.0000 0.0000 0.00 10016.00

4 2008.01.07 07:54 close 2 0.10 1.4672 0.0000 0.0000 40.00 10056.00

5 2008.01.07 07:54 sell 3 0.10 1.4671 0.0000 0.0000 0.00 10056.00

6 2008.01.09 15:56 close 3 0.10 1.4663 0.0000 0.0000 7.04 10063.04

7 2008.01.10 14:24 buy 4 0.10 1.4708 0.0000 0.0000 0.00 10063.04

8 2008.01.10 14:47 close 4 0.10 1.4748 0.0000 0.0000 40.50 10103.54

любая помощь будет очень признательна

с уважением

Майкл

[lang=pl]Привет, Майкл,

Один вопрос, вам нужно остановить открытие новых позиций, если любая позиция в текущий день закрыта, или вы не позволяете, например, открыть короткую позицию, если любая короткая позиция закрыта по стопу?

закрывается по стопу? Есть пример как это сделать в случае OP_BUY (для других аналогично)

int time;

bool cond = true;

double stopLoss = 50;

double takeProfit = 70;

double lots = 0.1;

int orders = 0;

int magic = 123;

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

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

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

int init()

{

//----

//----

return(0);

}

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

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

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

int deinit()

{

//----

//----

return(0);

}

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

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

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

int start()

{

Print(countOrders(magic, OP_BUY));

if(orders !=countOrders(magic,OP_BUY)) cond = false;

if(time != DayOfWeek()) cond = true;

if(cond) {

OrderSend(Symbol(),OP_BUY,lots,Ask, 1,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point, takeProfit),"",magic);

}

orders = countOrders(magic,OP_BUY);

time = DayOfWeek();

//----

return(0);

}

int countOrders(int oMagic,int oType) {

int count=0;

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

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

count++;

}

}

}

}

}

return(count);

}

double sltpValue(double w1, int w2){

if(w2 == 0)

return (0);

return (NormalizeDouble(w1, Digits));

}

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

Надеюсь, что все понятно. В случае возникновения вопросов обращайтесь ко мне, пожалуйста.

Будьте здоровы,

Grzesiek[/lang]

 

Привет, Гжезик,

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

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

- если у нас новый день, то все виды новых ордеров могут быть исполнены.

то, что я сделал, не работает:

extern bool Only1OrderPerDay=true;

if(Only1OrderPerDay==true){

CountHistoryOrders();

}

void CountHistoryOrders(){

for(int d=0;d<OrdersHistoryTotal();d++){

OrderSelect(d,SELECT_BY_POS,MODE_HISTORY);{

if(OrderSymbol()==Symbol() && (OrderMagicNumber()==Magic || Magic==0))d++;

Print("HistoryOrders "+DoubleToStr(d,0));

{

if(d>0 ....time?...){

return;

}}}}}

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

Михаил

g.pociejewski:
[lang=pl]Привет, Майкл,

Один вопрос, нужно ли останавливать открытие новых позиций, если какая-либо позиция в текущем дне закрыта, или вы не разрешаете, например, открывать шорт, если какой-либо шорт

закрывается по стопу? Есть ли пример как это сделать в случае OP_BUY (для других аналогично)

int time;

bool cond = true;

double stopLoss = 50;

double takeProfit = 70;

double lots = 0.1;

int orders = 0;

int magic = 123;

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

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

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

int init()

{

//----

//----

return(0);

}

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

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

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

int deinit()

{

//----

//----

return(0);

}

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

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

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

int start()

{

Print(countOrders(magic, OP_BUY));

if(orders !=countOrders(magic,OP_BUY)) cond = false;

if(time != DayOfWeek()) cond = true;

if(cond) {

OrderSend(Symbol(),OP_BUY,lots,Ask, 1,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point, takeProfit),"",magic);

}

orders = countOrders(magic,OP_BUY);

time = DayOfWeek();

//----

return(0);

}

int countOrders(int oMagic,int oType) {

int count=0;

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

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

count++;

}

}

}

}

}

return(count);

}

double sltpValue(double w1, int w2){

if(w2 == 0)

return (0);

return (NormalizeDouble(w1, Digits));

}

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

Надеюсь, что все понятно. В случае возникновения вопросов обращайтесь ко мне, пожалуйста.

Будьте здоровы,

Grzesiek[/lang]
 

Перетаскивание стоп-лосса

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

У меня есть скрипт Drag and Drop Stop loss, и я люблю его использовать. Но у моего брокера не работает для 2 ордеров в одном и том же скарте, только для 1 ордера. Я хочу установить стоп лосс для 2 ордеров в одном месте.

В чем проблема? У других брокеров он работает нормально.

Пожалуйста, помогите

int start()

{

//----

int digits = MarketInfo(Symbol(),MODE_DIGITS);

double value = NormalizeDouble(WindowPriceOnDropped(),digits);

for(int i=OrdersTotal()-1;i>=0;i--)

{

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

продолжаем;

if(OrderSymbol()!=Symbol())

continue;

RefreshRates();

if(OrderType()==OP_BUY)

if(value<Bid)

OrderModify(OrderTicket(),OrderOpenPrice(),value, OrderTakeProfit(),OrderExpiration(),White);

if(OrderType()==OP_SELL)

if(value>Ask)

OrderModify(OrderTicket(),OrderOpenPrice(),value, OrderTakeProfit(),OrderExpiration(),White);

if((OrderType()==OP_BUYSTOP) || (OrderType()==OP_BUYLIMIT))

if(value<OrderOpenPrice())

OrderModify(OrderTicket(),OrderOpenPrice(),value, OrderTakeProfit(),OrderExpiration(),White);

if((OrderType()==OP_SELLSTOP) || (OrderType()==OP_SELLLIMIT))

if(value>OrderOpenPrice())

OrderModify(OrderTicket(),OrderOpenPrice(),value, OrderTakeProfit(),OrderExpiration(),White);

}

return(0);

}

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

 

Как найти положение ординат X Y двух разнородных индикаторов в советнике для покупки и продажи, где пересекаются

скажем, Macd и другого индикатора в одном и том же подокне?

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