Что-то не получилось не сходятся коды написанные на сайте и в ссылке скрипт test Пожалуйста разъясните очень хочется научиться программировать Спасибо
mql5. Попробовал открыть ордер вот таким образом:
…
void OnStart()
{
double buyTP=0; //тейкпрофит для покупки
double sellTP=0; //тейкпрофит для продажи
double buySL=0; //стоплосс для покупки
double sellSL=0; //стоплосс для продажи
double Ask,Bid;
MqlTradeRequest my_request;
MqlTradeResult my_result;
Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
string symbol=Symbol();
if(TakeProfit>0)
{
buyTP=Ask+TakeProfit*_Point;
sellTP=Bid-TakeProfit*_Point;
}
if(StopLoss>0)
{
buySL=Ask-StopLoss*_Point;
sellSL=Bid+StopLoss*_Point;
}
my_request.action=TRADE_ACTION_DEAL;
my_request.magic=1;
my_request.deviation=0;
my_request.order=1;
my_request.sl=buySL;
my_request.tp=buyTP;
my_request.symbol=symbol;
my_request.type=ORDER_TYPE_BUY;
my_request.type_filling=ORDER_FILLING_AON;
my_request.volume=0.1;
my_request.type_time=ORDER_TIME_GTC;
OrderSend(my_request,my_result);
Не работает. Что надо сделать, чтобы было правильно?
Что-то не получилось не сходятся коды написанные на сайте и в ссылке скрипт test Пожалуйста разъясните очень хочется научиться программировать Спасибо
Для простоты можно воспользоваться классом CTrade из Trade\Trade.mqh
Пример: OrderOpen.mq5
Все очень просто. В конце статьи можете скачать рабочий скрипт. А читая статью разобраться как он работает. Редактор изменяет некоторые символы при публикации. Это касается кавычек и знаков минус. Поэтому я и выкладываю исходные коды в конце статей.
Добрый день! непонятна следующая строка можно подробнее?
if(TakeProfit>0)
{buyTP=Ask+TakeProfit*Point;
sellTP=Bid-TakeProfit*Point;}
Спасибо за этот блог. Очень интересно.
Вопрос:
Что значит двойное равно == ? Например:
if(Lot==0)
Александр, не могли бы Вы наглядно показать описание скрипта автоматического открытия отложенных ордеров STOP и LIMIT на основе скрипта test на определенном расстоянии от цены и друг от друга с TP и SL и определенным количеством ордеров и лотов?Заранее благодарен,Тимур.
Anton
В языке MQL двойное равно «==» означает проверку на равенство, в то время как одинарный знак равно «=» означает присваивание значения.
Амир
Здесь мы проверяем внешний параметр TakeProfit и если он задан (больше 0), то для открываемых ордеров рассчитываем значение тейкпрофита.
leo52
Здесь нет ничего сложного. Вместо OP_BUY пишем OP_BUYSTOP для STOP ордеров или OP_BUYLIMIT для LIMIT ордеров. А вместо Ask и Bid указываем необходимую нам цену. Количество устанавливаемых ордеров тоже не проблема. Нужно вызывать функцию OrderSend столько раз — сколько ордеров мы хотим установить.
Подскажите пожалуйста, как прописать код, чтоб в параметрах ордера присутствовал трейлингстоп?
Здравствуйте спасибо за ресурс очень необходимый, у меня возникла проблема подскажите пожалуйста как ее решить:
««,0,0,CLR_NONE);’ — double quotes needed
«,0,0,CLR_NONE);’ — double quotes needed эти две ошибки появляются при компиляции. И еще у нас была команда алерт, куда она делась? или невнимательно что то прочитал???
А все разобрался, у Вас не хватает кавычек ««», и.т.д. а как быть с алертом?
Night
Насколько я понял имеется ввиду встроенный в терминал тралл? Если он, то никак. Пишутся свои советники для трала. Если проблема написать, то в интернете полно их (как платных, так и бесплатных).
Антон
В конце каждого урока есть ссылка на скачивание уже готового советника, скрипта или индикатора. Я уже объяснял что при публикации некоторые символы искажаются. Поэтому и выкладываю в конце статей исходники.
Антон
Алерт нам был нужен для вывода на экран рассчитанного лота. А здесь мы открываем ордера с рассчитанным лотом (лот можно видеть в ордере). Поэтому я посчитал что он лишний и удалил. Если он Вам нужен — добавте в код.
Спасибо за сайт.
Возникла проблема не могу решить. Скачал скрипт test , откомпилировал. Запустил — ордер (на покупку) не выставляется. Скрипт ведет себя так словно торговый поток постоянно занят.
для проверки составил простейший скрипт
while(!IsTradeAllowed()) {Sleep(1000);Alert(IsTradeAllowed());}
выдает каждую секунду 0
Пожалуйста подскажите в чем дело?
Извините. Все понял. В начальных установках не отметил «разрешить советнику торговать». Ещё раз спасибо за сайт
Спасибо.Всё понятно и доступно!Респект!
Если я не хочу устанавливать takeprofit и stopLoss
мне нужно обнулить эти переменнные
buyTP=0
sellTP=0
или ничего им не присваивать?
0 — это как раз и значит не устанавливать значение
Автору не просто спасибо, ему СПАСИБО!!! доходчиво, понятно, переделал немного скрипт и получил то, что нужно. На ручном скальпинге просто безумно необходимо повесить на горячую клавишу скрипт, которые делает рыночный моментальный ордер с выставленным ТР. Я в программировании полный ноль, но разобрался с ходу по объяснениям. Если кто такой же немощный, то вот упрощенный до нельзя скрипт на продажу:
extern bool Sell=true; //для открытия ордера на продажу
extern int TakeProfit=1;
//±——————————————————————+
//| script program start function |
//±——————————————————————+
int start()
{
//—-
double Lot =0.01;
double sellTP=0; //тейкпрофит для продажи
if(TakeProfit>0)
{sellTP=Bid-TakeProfit*Point;}
if(Sell) OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,sellTP,»продажа нах»,0,0,CLR_NONE);
//—-
return(0);
}
//±——————————————————————+
на покупку выдергиваем нужные строки и подправляем)
Счастье есть)
Здравствуйте! И во-первых хочу поблагодарить за всю работу по созданию и поддержанию этого замечательного сайта.
А во-вторых такой вопрос: скрипт после того как он выполнил то что требуется — закрывается. Чтобы снова запустился автоматически на тех же условиях что и открывался изначально — что нужно сделать?
Очень жду Вашего ответа
С Уважением, Вячеслав
Скрипт выполняется 1 раз при его запуске. Если необходимо переодическое выполнение — пишется советник и в нем задаются условия для выполнения. Можно конечно и скрипт зациклить, но это не имеет смысла.
Благодарю за ответ !
‘\end_of_program’ — unbalanced left parenthesis C:\Program Files\Alpari MT4\experts\scripts\test.mq4 (47, 1)
что это означает? вылезает при компилировании
Это означает что нехватает закрывающей скобки. Например: Alert(Symbol();
при компиляции выдает
‘BuySL’ — variable not defined
‘BuyTP’ — variable not defined
‘SellSL’ — variable not defined
‘SellTP’ — variable not defined
что надо изменить в коде?
Скажите, пожалуйста, а как сделать так, чтобы открывалось, например, 5 ордеров одновременно, какую функцию надо открывать?
Супер статья. Нашёл что искал! Спасибо!
У меня есть ещё вопрос. Буду очень благодарен если ответите. Я немножко переделал скрипт, только не спрашивайте мне для чего он нужен 🙂 Т.е. он мне нужен точно, если захотите узнать я скажу.
//+——————————————————————+
//| test.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+——————————————————————+
#property copyright «Copyright © 2009, MetaQuotes Software Corp.»
#property link «http://www.metaquotes.net»
#property show_inputs
extern int TakeProfit=10;
extern int StopLoss=0;
//+——————————————————————+
int start()
{
RefreshRates();
NewOrder(OP_SELL,1);
return(0);}
//+——————————————————————+
int NewOrder(int Cmd,double Lot)
{double TP=0; //тейкпрофит
double SL=0; //стоплосс
double PR=0; //Цена
while(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUY)
{PR=Ask;
if(TakeProfit>0) TP=Ask+TakeProfit*Point;
if(StopLoss>0) SL=Ask-StopLoss*Point;}
if(Cmd==OP_SELL)
{PR=Bid;
if(TakeProfit>0) TP=Bid-TakeProfit*Point;
if(StopLoss>0) SL=Bid+StopLoss*Point;}
int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,»»,0,0,CLR_NONE);
if(tic<0) Print(«Ошибка открытия ордера: «,GetLastError());
return(tic);}
//+——————————————————————+
Я так понял вот эта часть
__________________________
int start()
{
RefreshRates();
NewOrder(OP_SELL,1);
return(0);}
__________________________
будет выполняться постоянно через каждые Sleep(100);
Мне же необходимо, чтобы открывался такой ордер сразу как только старый закрылся. Как мне лучше это всё организовать? Не хочется просто грузить процессор и сервер через каждые 10 секунд.
Спасибо!
и еще вопрос где можно посмотреть список всех команд, знаков, описание их значения?
Grig
Компилятор сообщает что отсутствует описание переменных. Прежде чем использовать переменные их необходимо определить. Например как в статье:
double buyTP=0; //тейкпрофит для покупки
double sellTP=0; //тейкпрофит для продажи
double buySL=0; //стоплосс для покупки
double sellSL=0; //стоплосс для продажи
Алексей
Вызвать функцию открытия ордера 5 раз.
Сергей
Это вопрос не по программированию, а на логику. Достаточно немного подумать и решение получается простейшим: проверять есть ли открытые ордера
int Count=0;
for(int i=OrdersTotal() −1;i>=0;i—)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) Count++;
и если их нет, то открывать новый
if(Count==0) NewOrder(OP_SELL,1);
Андрей
В справке по языку. Вызывается по клавише F1 в редакторе.
До 5го урока все было последовательно написано, а тут как-то в разброс. Или у меня логика нарушена.
— после текста «Все эти типы ордеров програмно открываются одной и той же функцией: OrderSend().»
Нужно было сразу ее и описывать, а не сбивать на параметры Bool, пункты, условия и тп.
— И чесно говоря после написанного «Но а как быть если наша стратегия не подразумевает установку тейкпрофита или стоплосса?»
предложение «воспользуемся знакомой нам функцией проверки условия if:» вводит в ступор.
Обычно если не подразумевает, то и не указывают.
Приходится читать до конца, чтобы потом вернуться уловить суть.
Здравствуйте, подскажите, пожалуйста. Мне надо сделать так чтобы советник проверял есть ли открытые ордера и если они есть (скажем 5 по одной паре), то изменял начальные параметры. Буду очень благодарен если ответите, желательно на почту 🙂
Здравствуйте, а у меня такая проблема: Скачал файл Тест, запускаю в БТ4 максимум чего я добился дак это того что он открывает мне окно «открытия ордеров» то есть как бы я не играл с настройками
extern bool Buy=false;
extern bool Sell=false;
все равно в окне «открытия ордеров» приходится выбирать покупаю я или продаю. ну а до стоп лосов и профитов я не дошел. подскажите в чем может быть причина? почему ордер не открывается автоматически а лишь вызывает мне окно «открытия ордеров»? галочку «разрешить торговлю» я ставлю. ДЛЛ тоже разрешаю. Может МТ4 обновили и на нем уже этот скрипт не работает? Спасибо
так , ну по галочку «ручное подтверждение мне уже сказали» но все равно ордер не отрывает. увеличиваю риск. Пишет недостаточно средств. уменьшаю риск — ни чего не происходит. Что делать?
Подскажите пожалуйста скрипт который будет проверять открыл ли ордер по данной цене и в какую сторону.
quote:»Сергей
Это вопрос не по программированию, а на логику. Достаточно немного подумать и решение получается простейшим: проверять есть ли открытые ордера»
И вот вопрос… а как можно найти необходимый ордер по мейджику?
Просто у меня стратегия канальная с постоянным количеством ордеров и у каждого свой мэйджик. Так вот было бы замечательно при закрытии произвольного ордера по тп или лосю (без разницы)… какой именно ордер закрылся (номер magic)
Получаю ошибку 130.
И ордера не открываются аутоматычно.
А если подтверждать вручную, все равно открываются без SL i TP.
ало, palt??????????????
Скрипт не открывает ордера с заданными TP и SL ….но если ставлю 0 на TP и SL тогда открывает….объясните пожалуйса в чем дело..?
Здравствуйте! Помогите решить вопрос с открытиями ордеров. Принцип такой:
1. Открываем ордер на покупку (TP=20, SL=20).
2. а) Если ордер закрывается по TP, то должен открыться снова такой же ордер на покупку.
б) Если ордер закрылся по SL, то следующий ордер должен уже быть на продажу.
3. Всё это дело зацикливаем (т.е. я как понимаю это должно всё работать по принципу: Если истина, то такое же действие, если ложь, то противоположное действие!
Спасибо у вас прекрасная школа.
Но я почемуто всё равно не могу открыть, серию из трёх отложенных ордеров, по какойто задонной цене.
Кто может помогите, завтра тест…Пожалуйсто
Ещё одна просьба, вапрос: Какие параметры для отложенных ордеров должны быть установлены, чтоб цена закрытия первого ордера , по ( стапу или профиту) == равнялась цене следующего ордера?
Ещё одна просьба, вапрос: Какие параметры для отложенных ордеров должны быть установлены, чтоб цена закрытия первого ордера , по ( стапу или профиту) == равнялась цене, открытия следующего ордера?
просто в предыдущем тксте пропустил слово» открытия»
У меня скрипт не открывает ордера, а когда ставлю галочку с подтверждением, то просто открывается новый ордер без профита и лоса. Копировал ваш скрипт, компилировал, та же беда((( Никак не разберусь. И гугл не помогает((
Комментарии закрыты.
Adblock