Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Идея
Хорошо, мальчики и девочки
Я размышлял над идеей просто создать 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() не делают этого должным образом.
Я также хотел бы сохранить несколько переменных и не потерять данные.
Есть ли способ сделать это?
Я также хотел бы иметь возможность сделать это для индикатора.
Большое спасибо.
Помощь в программировании
Привет всем,
Я работаю над модификацией измерителя силы валюты, чтобы показать силу валюты на основе времени от графика. На данный момент используется следующий код:
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