Начнем с того, что программу по-хорошему пишут трое: Заказчик, Постановщик, Программист.
Заказчик у нас есть, программистами многие тут себя считают. Постановщик зачем?
Дело в том, что заказчики - народ зажимистый. А программист - торопливый. Он сразу начинает программу писать.
И вдруг соображает, что часть данных заказчик зажал. Программист звонит, уточняет, снова начинает. И так много раз.
Программу, которую при наличии всех данных можно за пол-дня написать, программист пишет неделю. Это с одной стороны.
С другой стороны еще хуже. Заказчик рассказывает, а в голове у программиста реализации роятся. И очень они программиста утомляют.
Постановщик - человек спокойный. Он знает, что запрограммировать можно абсолютно все, нужны исходные данные.
И он эти данные из заказчика методично выколачивает и на листочек записывает.
До тех пор, как заказчик устало скажет: - Ну вроде так, ну вроде все сказал.
Что заказчик зажимистый - видно на этом примере. Например, время он имеет в виду серверное, или локально- компьютерное.
Время с какой точностью задавать - в часах или с минутами? Позицию открыть с учетом ECN или без?
Может быть, он и слов то таких отродясь не слыхал - а программисту надо.
Теперь дело за программистом. И если он сразу начинает писать - гоните его прочь.
Сначала программист должен спроектировать структуру данных и выбрать структуру программы.
Лет 40 назад видел в журнале программу в 70 строк. Из них 60 -описание данных. Можно написать просто:
int start()
{
Операторы ожидания
Операторы открытия позиции
}
А можно сложнее, что потом обернется большой экономией времени и сил
#property strict void OnStart() { Ожидание(); Торговля(); } void Ожидание(); { Операторы ожидания } void Торговля(); { Операторы открытия позиции }
Можно сначала подумать - может советник нужен? Развивая структуру дальше, можно организовать ожидание по-разному
1) вычислить разницу в миллисекундах текущего момента и требуемого. Устроить ожидание. А потом ждать и думать, сработает или завис?
2) Устроить цикл с ожиданием в одну минуту и выдавать алерты оставшегося времени.
сарказм, юмор и немного истории это прекрасно!!! что касается советник или скрипт мне не принципиально! почему написал что нужен именно скрипт т.к. нужно выполнить точное действие или бездействие при определенном условии (условие описал выше) в определенное время (все условия и время описаны переменными для того, что бы их в зависимости от погоды можно было менять), да может данных мало но мне казалось это все, что может понадобится для написания программы и понимая что это не все так просто могу уточнить, что время необходимо с минутами т.е. в 12.00, далее что касается времени то нужно серверное, по поводу открытия позиции то с учетом ECN, что бы она открывалась мгновенно (быстро, в общем не зависимо от того, что происходит на рынке) без ожидания если это возможно, если нет и необходимо закладывать какое то время ожидания то как это реализовать в программе? просто я полагал что при выполнении условий программы и когда будет достигнуто одно из условий сразу будет открыт ордер (на покупку или продажу в зависимости от достигнутого условия) и алерты не понадобятся.
в общем что я начал сам и до чего дошел:
не до конца описал все переменные! по поводу точного времени теперь потребуется значение, переменную i надо записать по другому
int i=12; // время старта программы
extern double StopLoss =100; // SL для открываемого ордера
extern double TakeProfit =50; // ТР для открываемого ордера
extern double Lots =0.1; // Жестко заданное колич. лотов
SL =OrderStopLoss(); // SL выбранного орд.
TP =OrderTakeProfit(); // TP выбранного орд.
input int StartHour =i; //старт программы в указанное а-время
вот такой простенький цикл на открытие ордеров, стремился к простоте здесь х и у значение цен в определенный момент времени их сравнение и открытие позиции
if (x-y)>=100
{
opn_b=true
}
if (x-y)>=100
{
opn_s=true
}
Применил время компьютера. Метка 12:25 --> 17:42 время и время срабатывания. Можно отключить enum, закомментировав строку #define РежимENUM и откомпилировать
//+---------------------------------------------------+
//| По времени С-ПоВремени.mq4 |
//+---------------------------------------------------+
#property strict
#property show_inputs
#define РежимENUM // Для отключения enum закомментировать эту строку
#ifdef РежимENUM
enum Минуты // 60 значений минуты
{ М00,М01,М02,М03,М04,М05,М06,М07,М08,М09,М10,М11,М12,М13,М14,
М15,М16,М17,М18,М19,М20,М21,М22,М23,М24,М25,М26,М27,М28,М29,
М30,М31,М32,М33,М34,М35,М36,М37,М38,М39,М40,М41,М42,М43,М44,
М45,М46,М47,М48,М49,М50,М51,М52,М53,М54,М55,М56,М57,М58,М59};
enum Часы // 24 значения часов
{ Ч00,Ч01,Ч02,Ч03,Ч04,Ч05,Ч06,Ч07,Ч08,Ч09,Ч10,Ч11,
Ч12,Ч13,Ч14,Ч15,Ч16,Ч17,Ч18,Ч19,Ч20,Ч21,Ч22,Ч23,};
extern Часы Час=0; // Выберите час из списка
extern Минуты Минута=0; // Выберите минуту из списка#else
#else
extern int Час=0;
extern int Минута=0;
#endif
void OnStart()
{
string Разделитель=":";
int ЧасСейчас, МинутаСейчас;
datetime Время;
string Время1, Время2;
do
{
Время=TimeLocal();
ЧасСейчас=TimeHour(Время);
МинутаСейчас=TimeMinute(Время);
if(ObjectFind("Итог")<0) // Проверка наличия метки для вывода информации
{
ObjectCreate("Итог", OBJ_LABEL, 0, 0, 0); // Создание
ObjectSet("Итог", OBJPROP_CORNER, 1); // Правый верхний угол
ObjectSet("Итог", OBJPROP_XDISTANCE, 10); //X
ObjectSet("Итог", OBJPROP_YDISTANCE, 10); //Y
}
// Вывод в метку
if(Разделитель==":")Разделитель=" "; else Разделитель=":";
Время1=string(ЧасСейчас)+Разделитель;
if(ЧасСейчас<10)Время1="0"+Время1;
if(МинутаСейчас<10)Время1+="0";
Время1+=string(МинутаСейчас);
Время2=string(Час)+":";
if(Час<10)Время2="0"+Время2;
if(Минута<10)Время2+="0";
Время2+=string(Минута);
ObjectSetText("Итог", Время1 + " --> " + Время2,
8,"Arial",Yellow); // Размер, наименование и цвет шрифта
Sleep(1000);
} while(((Час!=ЧасСейчас)||(Минута!=МинутаСейчас)) && !IsStopped());
// Теперь совершаем торговую операцию
ObjectSetText("Итог", "Торгуем", 10,"Arial",GreenYellow);
Sleep(4000); // Пауза 4 секунды
// Совершили торговую операцию
ObjectDelete("Итог");
}
tara:
Прочитайте от корки до корки учебник Ковалева, делая у себя в терминале все примеры программ, приводимые автором. Если что-то не получается из-за изменения языка - самостоятельно вносите коррективы, анализируя для этого документацию Как только у Вас что-то начнет работать, а что-то - нет, обращайтесь.
дельное замечание!!!
не в обиду, но чтоб Вам когда полезете тачку чинить и чего нить будет не получаться все так и говорили про книжку почитать, и приводимые примеры разборки на машине потренировать, внося коррективы и т.д. ну Вы поняли!!!
Применил время компьютера. Метка 12:25 --> 17:42 время и время срабатывания. Можно отключить enum, закомментировав строку #define РежимENUM и откомпилировать
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
в общем прошу помощи в создании скрипта!!! у меня чего-то не получается рабочего не пойму как вставить переменную цены в определенное время!!!!
в общем суть такая: нужен скрипт который бы открывался в начинал работу в определенное i-тое время (допустим i=12 часам дня)
дальше должен открыться ордер на продажу или покупку или ни чего!
ордер на продажу открывается если цена (значение котировки) в i-тое время дня минус цену (значение котировки ну допустим в j-тое время равное 10 часам утра этого же дня) и если разница больше или равна х=(задаваемое число пунктов для той или иной валюты)
(цена i - цена j)>=x
дальше ордер на покупку открывается если цена в j-тое время дня минус цену i-тое время дня и если разница больше или равна х (цена j - цена i)>=x
иначе ни чего не делать! (т.е. во время когда разность значений меньше х)
ну и естественно ограничить профит и потери целыми значениям!