Помощь в кодировании - страница 16

 
nontan:
Привет, гениальный кодер и добрые люди:D

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

Если предыдущая позиция закрыта по тейк-профиту, сделайте новый вход, который устанавливает 20 пунктов по s/l и t/p на следующей цене открытия. (на 5M графике)

Я пытался написать один.

if(OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))

//Последней позицией был мгновенный ордер OP_BUY или OP_SELL

{

if(OrderClosePrice() == OrderTakeProfit())

//Если цена закрытия совпадает с ценой тейк-профита

{

if(OrderType() == OP_BUY)

//Тип ордера этого ордера buy

{

OrderSend(OP_BUY,Lots,Ask,Slippage,SLpips,Ask+20*Point,"",MAGIC);//Лоты и другие переменные определяю сам

}

else if(OrderType() == OP_SELL)

{

OrderSend(OP_SELL,Lots,Bid,Slippage,SLpips,Bid-20*Point,"",MAGIC);

}

} }

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

Кто-нибудь помогите мне с этим вопросом!!!

С уважением.

[lang=pl]Здравствуйте,

Можете ли вы прикрепить полный код советника?

Спасибо,

Grzesiek[/lang]

 

...

Попробуйте использовать это в сравнении

if (NormalizeDouble(OrderClosePrice(),Digits) == NormalizeDouble(OrderTakeProfit(),Digits))

может это поможет

nontan:
Привет, гениальный кодер и добрые люди:D

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

Если предыдущая позиция закрыта по тейк-профиту, сделайте новый вход, который установит 20 пунктов на s/l и t/p по следующей цене открытия. (на 5M графике)

Я попытался написать один.

if(OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))

//Последней позицией был мгновенный ордер OP_BUY или OP_SELL

{

if(OrderClosePrice() == OrderTakeProfit())

//Если цена закрытия совпадает с ценой тейк-профита

{

if(OrderType() == OP_BUY)

//Тип ордера этого ордера buy

{

OrderSend(OP_BUY,Lots,Ask,Slippage,SLpips,Ask+20*Point,"",MAGIC);//Лоты и другие переменные определяю сам

}

else if(OrderType() == OP_SELL)

{

OrderSend(OP_SELL,Lots,Bid,Slippage,SLpips,Bid-20*Point,"",MAGIC);

}

} }

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

Кто-нибудь помогите мне с этим вопросом!!!

С уважением.
 

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

Я пытался вставить NormarizeDouble, но не получилось...

Не могли бы вы научить меня, почему это не работает?

---------------------------------------------------

#include

#define MAGIC 20120101

#define COMMENT "Riding9"

extern double Lots = 0.1;

extern int Slippage = 3;

extern int SLpips = 20;

extern int TPpips = 50;

extern int StartTime = 1;

extern int FinishTime = 23;

extern int MAPeriod = 48;

int EntrySignal(int magic)

{

double pos = MyCurrentOrders(MY_OPENPOS, magic);

double Ma9 = iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

int ret = 0;

if((pos <= 0) && (Close[3] Open[2] && Open[2] >= Ma9) || (Open[2] Ma9)) && (Close[1] > Open[1] && Open[1] > Ma9)) ret = 1;

else if((pos <= 0) && (Open[3] Ma9) && (Close[2] Ma9) && (Close[1] > Open[1] && Close[1] > Ma9)) ret = 1;

if((pos >= 0) && (Close[3] >= Ma9) && ((Close[2] < Open[2] && Open[2] Ma9 && Close[2] < Ma9)) && (Close[1] < Open[1] && Open[1] < Ma9)) ret = -1;//

else if((pos >= 0) && (Open[3] > Ma9 && Close[3] Open[2] && Open[2] < Ma9) && (Close[1] < Open[1] && Close[1] < Ma9)) ret = -1;

return(ret);

}

bool MyOrderSendSL(int type, double lots, double price, int slippage, int slpips, int tppips, string comment, int magic)

{

int mult=1;

if(Digits == 3 || Digits == 5) mult=10;

slippage *= mult;

if(type==OP_SELL || type==OP_SELLLIMIT || type==OP_SELLSTOP) mult *= -1;

double sl=0, tp=0;

if(slpips > 0) sl = price-slpips*Point*mult;

if(tppips > 0) tp = price+tppips*Point*mult;

return(MyOrderSend(type, lots, price, slippage, sl, tp, comment, magic));

}

int start()

{

if(Hour() >= StartTime && Hour() < FinishTime)

{

int sig_entry = EntrySignal(MAGIC);

if(sig_entry > 0)

{

MyOrderClose(Slippage, MAGIC);

MyOrderSendSL(OP_BUY, Lots, Ask, Slippage, SLpips,TPpips, COMMENT, MAGIC);

}

if(sig_entry < 0)

{

MyOrderClose(Slippage, MAGIC);

MyOrderSendSL(OP_SELL, Lots, Bid, Slippage, SLpips,TPpips, COMMENT, MAGIC);

}

if(OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))

{

if (NormalizeDouble(OrderClosePrice(),Digits) == NormalizeDouble(OrderTakeProfit(),Digits))

{

if(OrderType() == OP_BUY)

{

OrderSend(OP_BUY,Lots,Ask,Slippage,SLpips,Ask+20*Point,"",MAGIC);

}

else if(OrderType() == OP_SELL)

{

OrderSend(OP_SELL,Lots,Bid,Slippage,SLpips,Bid-20*Point,"",MAGIC);

}

}

}

return(0);

}

return(0);

}

------------------------------------------------------

Пожалуйста, научите меня ошибаться, если обнаружите.

С уважением.

 

...

нетан,

Эта строка
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))

[/PHP]

выбирает не последний закрытый ордер, а первый (после начального баланса) ордер в очереди закрытых ордеров. Таким образом, она всегда проверяет один фиксированный ордер вместо того, чтобы проверить, каким был последний ордер, а затем подстроиться под него. Если вы хотите проверить последний закрытый ордер (последний в очереди закрытых ордеров, но имейте в виду, что metatrader [люди не гарантируют, что он последний при сортировке по времени закрытия), вам следует использовать эту форму проверки
[PHP]if (OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
 

Спасибо, mladen

Я еще не использовал функцию OrderHistoryTotal. Она подходит для этого кода.

Наконец, я получил желаемый код после модификации. В результате советник работает, чтобы сделать новый вход после получения TakeProfit.

Спасибо за вашу помощь.

 

Мне нужна ваша помощь мастера кодирования

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

 
johnray:
здравствуйте, пожалуйста, мне нужен человек, который поможет мне написать код моей стратегии

[lang=pl]Просто сообщите мне подробности.

Будьте здоровы[/lang]

 

Я отправил сообщение.

g.pociejewski:
[lang=pl]Просто сообщите мне подробности Спасибо[/lang].

спасибо мастер я отправил вам сообщение. это немного сложновато

 

Код для автоматического обновления

Я использую индикатор, который нуждается в постоянном обновлении. Я использую 15-минутный график, поэтому ему не нужно обновляться каждый тик, хотя это было бы неплохо, если бы не было большого расхода энергии. По крайней мере, у него должна быть возможность выбора временного интервала между каждым обновлением. Сейчас я обновляю вручную каждую минуту или около того, используя выпадающую вкладку "Графики" и выбирая "Обновить".

Есть ли код или способ автоматического обновления инди и/или графика, либо с помощью дополнительного кода в инди, либо в советнике?

Спасибо, el bee

 

[langtitle=fr]Оригинальный индикатор Параболик Сар от Уайлдера[/langtitle]

[lang=fr]
Привет!

Я ищу ОРИГИНАЛ параболического SAR, quiproquo by Wilder. Я сделал код этого индикатора для платформы PRT, но я не знаю кодирования в MT4.

Если у кого-то есть знания в кодировании MT4, я могу дать код личным сообщением, чтобы адаптировать его в кодировании MT4.

Спасибо
[/lang]