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

 

Идея

Хорошо, мальчики и девочки

Я размышлял над идеей просто создать CUF (Commonly used functions) - из всего, что я прочитал, вы не можете вызывать скрипты из советника.

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

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

Это основная проблема, которую я вижу во всех советниках, - они застревают в ожидании некоторого времени или какого-то грубого условия "сна", чтобы пройти, прежде чем продолжить. Это делает отмену и продажу в доли секунды маловероятной, что является серьезной неудачей в чрезвычайно волатильных условиях, на которых вы могли бы сделать состояние за несколько секунд.

Решение? Сделать индикатор CUFF, который работает с глобальными переменными? Кто-нибудь пробовал это. Индикатор циклически работает каждый тик, так что он идеален.

 

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

 

привет,

я новичок и хотел бы спросить, реализованы ли встроенные функции метастока : ref() и stochmomentum() какими-либо функциями в метатрейдере?

спасибо

 

Дариан, см. мой пример с глобальными переменными выше. Найдите скрипт, который посылает / свистит / делает то, что вы хотите, и введите его в него. Имейте в виду, что вам придется учитывать, что все они не сработают в одно и то же время, поэтому вам придется сделать задержку в несколько секунд / минут, прежде чем вы вернете переменные в 0.

 

с Global

могу ли я добавить GlobalVarible к индикатору следующим образом?

if ( trend[2]0 && Volume[0]>1 && !UpTrendAlert)

{

GlobalVariableSet("trend "+Symbol(),1);

// Print("UP" + GlobalVariableGet("trend "+Symbol()));

Message = " Покупка "+Symbol()+" M "+Period()+": Сигнал на ПОКУПКУ";

if ( AlertMode>0 ) Alert (Message);

UpTrendAlert=true; DownTrendAlert=false;

затем вызываем эту GlobalVariable в советнике с помощью

int init() {

GlobalVariableDel("trend "+Symbol());

trend = GlobalVariableGet("trend "+Symbol());

Buy = (trend == 1);

Sell = (trend == 2);

любая помощь приветствуется

 

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

 

Проблема с массивами, нужна помощь!

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

Я пытаюсь сделать функцию, которая определяет, теряет ли какой-либо открытый ордер больше денег, чем точка отсечения (скажем, $-1000).

Функция должна хранить OrderTicket() и OrderProfit() в двух отдельных массивах и выходить с return (1), чтобы показать, что точка отсечения достигнута.

Перед тем как сохранить значения в этих массивах, необходимо проверить массив OrderTicket() на предмет того, не подан ли уже этот ордер.

Если номер OrderTicket уже сохранен в массиве, он должен определить, потерял ли ордер ДОПОЛНИТЕЛЬНО $1000, и если да: заменить значение в массиве OrderProfit() свежим значением и выйти с return(1) в знак того, что достигнута НОВАЯ точка отсечения. Если ордер не потерял еще $1000 (называется Cutoff), то должен вернуться return(0), чтобы показать, что ни один ордер не потерял еще $1000.

Я думаю, что у меня все работает (не уверен???), но по какой-то причине массив заполняется большим количеством значений '0' наряду с легитимными значениями. Вывод массива выглядит следующим образом:

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 431 ResumeArrayPrices[k] = -3042

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 425 ResumeArrayPrices[k] = -3042

ResumeArrayTickets[k] = 386 ResumeArrayPrices[k] = -1008

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 371 ResumeArrayPrices[k] = -12933

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 320 ResumeArrayPrices[k] = -6057

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 249 ResumeArrayPrices[k] = -5076

ResumeArrayTickets[k] = 241 ResumeArrayPrices[k] = -1017

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 230 ResumeArrayPrices[k] = -13122

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 186 ResumeArrayPrices[k] = -4068

ResumeArrayTickets[k] = 128 ResumeArrayPrices[k] = -1008

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

[/code]

The following is my actual code:

[code]

int CheckForResume()

{

ResumeCheck = TimeLocal()+(PERIOD_M1*60)*5;

}

int arraycount1 =1;

int arraycount2 =1;

bool found = false;

int k;

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

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL))

{

if (OrderProfit()< Cutoff)

{

for (k=0; k<ArraySize(ResumeArrayTickets); k++)

{

if ((ResumeArrayTickets[k] == OrderTicket()) && ResumeArrayTickets[k] !=0)

{

found = true;

if (ResumeArrayPrices[k] + Cutoff < OrderProfit())

{

return (0);

}

else

{

Print ("ELSE");

arraycount1 = ArrayResize(ResumeArrayTickets,ArraySize(ResumeArrayTickets) + 1);

arraycount2 = ArrayResize(ResumeArrayPrices,ArraySize(ResumeArrayPrices) + 1);

ResumeArrayTickets[k] = OrderTicket();

ResumeArrayPrices[k] = OrderProfit();

return (1);

}

}

}

if (found == false)

{

arraycount1 = ArrayResize(ResumeArrayTickets,ArraySize(ResumeArrayTickets) + 1)'

arraycount2 = ArrayResize(ResumeArrayPrices,ArraySize(ResumeArrayPrices) + 1);

ResumeArrayTickets[k] = OrderTicket();

ResumeArrayPrices[k] = OrderProfit();

return (1);

}

}

}

return (0);

}

}

 

Обновление советника раз в бар

Здравствуйте, есть ли способ обновить советника так, чтобы он реагировал как при первой инициализации? (Как при перезапуске) Это нужно делать раз в бар. Например, раз в 30 минут.

RefreshRates() и WindowRedraw() не делают этого должным образом.

Я также хотел бы сохранить несколько переменных и не потерять данные.

Есть ли способ сделать это?

Я также хотел бы иметь возможность сделать это для индикатора.

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

 

Помощь в программировании

Привет всем,

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

aHigh = MarketInfo(mySymbol,MODE_HIGH); // set a high today

aLow = MarketInfo(mySymbol,MODE_LOW); // set a low today

aBid = MarketInfo(mySymbol,MODE_BID); // set a last bid

aAsk = MarketInfo(mySymbol,MODE_ASK);

Я понимаю, что MODE_HIGH и MODE_LOW получают максимумы и минимумы текущего дня. Как я могу получить максимум и минимум текущего таймфрейма графика?

Спасибо!

P.S. Я не программист, поэтому используйте маленькие слова, пожалуйста:)

 

Посмотрите в справочном руководстве функции iHigh и iLow.

удачи

Lux

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