Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
[lang=pl]Еще вопрос, ваше время по Гринвичу или нет? Если не GMT, то я немного изменю этот советник.
Я только что сделал это, пожалуйста, проверьте его и PM меня, если все в порядке.
Дистанция beetwen low и high stopLoss и TP я сделал как внешние переменные.
Спасибо, Гжешек.[/lang].Уважаемый Grzesiek
Я вставил этот индикатор в папку experts и сегодня наблюдал, чтобы узнать, как он работает. Проблема в том, что как только он совершает первую сделку и закрывает ордер либо по стопу, либо по t/p, то сразу же советник снова начинает торговлю по цене, по которой он закрыл последний ордер. Как я могу остановить это в коде? спасибо.
Кто-нибудь может помочь мне с этим?
Здравствуйте форумчане
У этого кода есть одна проблема, когда он исполняет сделку, все нормально, но когда он закрывает ордер снова, советник открывает новую сделку по цене и в то время, когда предыдущий ордер был закрыт. Я не увидел никакой ошибки в коде. Тот, кто это написал, очень занятой человек и не бывает в сети. Может ли кто-нибудь подсказать, в чем проблема?
extern double stopLoss = 35.0;
extern double takeProfit = 50.0;
extern string Begin="00:00";
extern string End="08:00";
extern double distance = 5;
bool isECN = true;
bool cond = false;
bool cond2 = false;
double low;
double high;
extern double lots = 1;
int magic = 123;
int slippage = 1;
string comment = "test";
int ticket;
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция деинициализации эксперта | |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
int start()
{
//----
if(isGoodTime(Begin,End))
{
if(!cond)
{
low = Bid;
high = Ask;
}
cond = true;
if(Bid < low) low = Bid;
if(Ask > high) high = Ask;
}
if((high - low)*1000>distance)
{
cond2 = true;
}
if(!isGoodTime(Begin,End))
{
cond = false;
}
if(!isGoodTime(Begin,End) && cond2)
{
if(countOrders(magic,OP_SELL) == 0 )
{
if(Bid<=(low-0.0010))
{
if(isECN == false)
{
OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,sltpValue(Ask+ stopLoss*Point,stopLoss) ,sltpValue(Ask- takeProfit*Point,takeProfit),comment,magic);
}
if(isECN)
{
ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,0,0,comment,magic);
OrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask+stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point, takeProfit),0);
}
}
}
if(countOrders(magic,OP_BUY) == 0)
{
if((Ask-high)>=0.0010)
{
if(isECN==false)
{
OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point, takeProfit),comment,magic);
}
if(isECN)
{
ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,0,0,comment,magic);
OrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point, takeProfit),0);
}
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
bool isGoodTime(string Begin, string End) {
if(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {
return(true);
}
return(false);
}
int countOrders(int oMagic,int oType) {
int count=0;
for(int i=0;i<OrdersTotal();i++) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderMagicNumber()==oMagic) {
if(OrderSymbol()==Symbol()) {
if(OrderType()==oType || oType<0) {
count++;
}
}
}
}
}
return(count);
}
double sltpValue(double w1, int w2)
{
if(w2 == 0)
return (0);
return (NormalizeDouble(w1, Digits));
}
Здравствуйте, Avasys,
Насколько я могу судить, в коде нет ничего неправильного, исходя из вашего описания, он делает именно то, на что запрограммирован (покупает, когда Ask выше, чем high и продает, когда bid ниже, чем low), в основном он продолжает покупать и продавать, когда high и low пробиты, соответственно.
Будьте здоровы,
Спасибо за ваш комментарий
Есть ли способ указать коду торговать только один раз в день и только при первом прорыве.
Автор этого кода очень занятой человек, он не может уделять много времени, как кажется.
помощь ценится[lang=pl]//+------------------------------------------------------------------+
//| simple EA.mq4 |
//| Copyright © 2011, luktom.biz |
//| www.luktom.biz/en |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, luktom.biz."
#property link "http://www.luktom.biz"
extern double stopLoss = 300.0;
extern double takeProfit = 500.0;
extern string Begin="2:00";
extern string End="10:00";
extern double distance = 60;
bool isECN = true;
bool cond = false;
bool cond2 = false;
double low;
double high;
extern double lots = 0.1;
int magic = 1232344524285020;
int slippage = 1;
string comment = "";
int ticket;
int short = 0;
int long = 0;
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция деинициализации эксперта | |
//+------------------------------------------------------------------+
int deinit()
{
//----
Print(countOrders(magic,OP_BUY));
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
int start()
{
Print(AccountCurrency());
//----
if(isGoodTime(Begin,End))
{
short = 0;
long = 0;
if(!cond)
{
low = Bid;
high = Ask;
}
cond = true;
if(Bid < low) low = Bid;
if(Ask > high) high = Ask;
}
if((high - low)*1000>distance)
{
cond2 = true;
}
if(!isGoodTime(Begin,End))
{
cond = false;
}
if(!isGoodTime(Begin,End) && cond2)
{
if(countOrders(magic,OP_SELL) == 0 )
{
if(Bid<=(low-0.0005) && short == 0)
{
short++;
if(isECN == false)
{
OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,sltpValue(Ask+ stopLoss*Point,stopLoss) ,sltpValue(Ask- takeProfit*Point,takeProfit),comment,magic);
}
if(isECN)
{
ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,0,0,comment,magic);
OrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask+stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point, takeProfit),0);
}
}
}
if(countOrders(magic,OP_BUY) == 0)
{
if((Ask-high)>=0.005 && long ==0)
{
long++;
if(isECN==false)
{
OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point, takeProfit),comment,magic);
}
if(isECN)
{
ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,0,0,comment,magic);
OrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point, takeProfit),0);
}
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
bool isGoodTime(string Begin, string End) {
if(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {
return(true);
}
return(false);
}
int countOrders(int oMagic,int oType) {
int count=0;
for(int i=0;i<OrdersTotal();i++) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderMagicNumber()==oMagic) {
if(OrderSymbol()==Symbol()) {
if(OrderType()==oType || oType<0) {
count++;
}
}
}
}
}
return(count);
}
double sltpValue(double w1, int w2)
{
if(w2 == 0)
return (0);
return (NormalizeDouble(w1, Digits));
}
Теперь советник открывает только одну позицию в день. Что касается вашего вопроса о электронной почте, то где-то на форуме есть мой пост в этой теме:)
Дайте мне знать, если найдете его.
Будьте здоровы,
Grzesiek[/lang]
Здравствуйте, Avasys,
Насколько я могу судить, с кодом все в порядке, исходя из вашего описания, он делает именно то, на что запрограммирован (покупает, когда Ask выше, чем high, и продает, когда bid ниже, чем low), в основном он продолжает покупать и продавать, когда high и low пробиты, соответственно.
Спасибо,Спасибо за ваш комментарий
Есть ли способ указать коду торговать только один раз в день и только при первом прорыве.
Автор этого кода очень занятой человек, он не может уделять много времени, как кажется.
И что я заметил, система совершает сделки, несмотря на то, что диапазон между указанными в коде временами больше 60 пунктов, система все равно торгует, она торгует только если диапазон между определенными временами (указанными в коде, см. время начала и окончания) меньше 60 пунктов, тогда торгует.
помощь приветствуется
[lang=pl]//+------------------------------------------------------------------+
//| simple EA.mq4 |
//| Copyright © 2011, luktom.biz |
//| www.luktom.biz/en |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, luktom.biz."
#property link "http://www.luktom.biz"
extern double stopLoss = 300.0;
extern double takeProfit = 500.0;
extern string Begin="2:00";
extern string End="10:00";
extern double distance = 60;
bool isECN = true;
bool cond = false;
bool cond2 = false;
double low;
double high;
extern double lots = 0.1;
int magic = 1232344524285020;
int slippage = 1;
string comment = "";
int ticket;
int short = 0;
int long = 0;
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция деинициализации эксперта | |
//+------------------------------------------------------------------+
int deinit()
{
//----
Print(countOrders(magic,OP_BUY));
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
int start()
{
Print(AccountCurrency());
//----
if(isGoodTime(Begin,End))
{
short = 0;
long = 0;
if(!cond)
{
low = Bid;
high = Ask;
}
cond = true;
if(Bid < low) low = Bid;
if(Ask > high) high = Ask;
}
if((high - low)*1000>distance)
{
cond2 = true;
}
if(!isGoodTime(Begin,End))
{
cond = false;
}
if(!isGoodTime(Begin,End) && cond2)
{
if(countOrders(magic,OP_SELL) == 0 )
{
if(Bid<=(low-0.0005) && short == 0)
{
short++;
if(isECN == false)
{
OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,sltpValue(Ask+ stopLoss*Point,stopLoss) ,sltpValue(Ask- takeProfit*Point,takeProfit),comment,magic);
}
if(isECN)
{
ticket=OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,0,0,comment,magic);
OrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask+stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point, takeProfit),0);
}
}
}
if(countOrders(magic,OP_BUY) == 0)
{
if((Ask-high)>=0.005 && long ==0)
{
long++;
if(isECN==false)
{
OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point, takeProfit),comment,magic);
}
if(isECN)
{
ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,0,0,comment,magic);
OrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point, takeProfit),0);
}
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
bool isGoodTime(string Begin, string End) {
if(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {
return(true);
}
return(false);
}
int countOrders(int oMagic,int oType) {
int count=0;
for(int i=0;i<OrdersTotal();i++) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderMagicNumber()==oMagic) {
if(OrderSymbol()==Symbol()) {
if(OrderType()==oType || oType<0) {
count++;
}
}
}
}
}
return(count);
}
double sltpValue(double w1, int w2)
{
if(w2 == 0)
return (0);
return (NormalizeDouble(w1, Digits));
}
Теперь советник открывает только одну позицию в день. Что касается вашего вопроса о электронной почте, то где-то на форуме есть мой пост в этой теме:)
Дайте мне знать, если найдете его.
Будьте здоровы,
Grzesiek[/lang]спасибо,
Я скопировал весь код здесь и вставил в mq4 файл, но когда я скопировал его в папку experts, он не работает, он не создал ex4 файл и не включен в меню experts advisors. Поэтому, пожалуйста, можете ли вы загрузить как mq4 файл или есть что-то в коде, потому что я пытался несколько раз
Определение положения щелчка мыши x,y на графике
Возможно ли определить положение щелчка мыши в MT4? Я не имею в виду WindowOnDrop. Если я знаю экранные координаты x,y, могу ли я преобразовать их в соответствующие Price/Time?
Спасибо за помощь.
С наилучшими пожеланиями,
Тиффани
Дорогой друг
Сегодня в понедельник код (старый, который работал в четверг и пятницу) не работал вообще.
Я вводил сделки вручную,
Простая система: Нужно очень мало рекомендаций по советнику
Вот логика
Торговать, когда диапазон между GMT 02:00 и 10:00 меньше 60 пунктов, затем открывать продажу, если цена пробивает линию минимум - 5 пунктов или покупку, если цена пробивает линию максимум + 5 пунктов. И ВЫПОЛНЯЙТЕ ТОЛЬКО ОДНУ СДЕЛКУ В ДЕНЬ, НЕ ИМЕЕТ ЗНАЧЕНИЯ СДЕЛКА ОТМЕНЕНА ЗАКРЫТА ПО СТОПУ ИЛИ ВЗЯТА ПРИБЫЛЬ ТОЛЬКО ОДИН ОРДЕР В ДЕНЬ.
ЗДЕСЬ ЕСТЬ КОД, НО ОН НЕ РАБОТАЕТ, в меню советника в MT4 есть неактивный значок и нет файла ex4 в папке experts, я не могу понять, что не так.
extern double stopLoss = 300.0;
extern double takeProfit = 500.0;
extern string Begin = "2: 00";
extern string End = "10: 00";
extern double distance = 60;
bool isECN = true;
bool cond = false;
bool cond2 = false;
double low;
double high;
extern double lots = 0.1;
int magic = 1232344524285020;
int slippage = 1;
string comment = "";
int ticket;
int short = 0;
long int = 0;
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int init()
{
//----
//----
(0) return;
}
//+------------------------------------------------------------------+
//| функция деинициализации эксперта | |
//+------------------------------------------------------------------+
int deinit ()
{
//----
Print (countOrders (magic, OP_BUY));
//----
(0) return;
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
int start()
{
Print (AccountCurrency ());
//----
if (isGoodTime (Begin, End))
{
short = 0;
long = 0;
if (! cond)
{
low = Bid;
high = Ask;
}
cond = true;
если (Bid < low) low = Bid;
if (Ask > high) high = Ask;
}
if ((high low) * 1000 > distance)
{
cond2 = true;
}
if (! isGoodTime (Begin, End))
{
cond = false;
}
if (! isGoodTime (Begin, End) & & cond2)
{
if (countOrders (magic, OP_SELL) == 0)
{
if (Bid ≪ = (CRL-0.0005) & & short == 0)
{
short + +;
if (isECN == false)
{
OrderSend (Symbol (), OP_SELL, lots, Bid, slippage, sltpValue (Ask + stopLoss * Point, stopLoss), sltpValue (Ask-takeProfit * Point, takeProfit), comment, magic);
}
if (isECN)
{
ticket = OrderSend (Symbol (), OP_SELL, lots, Bid, slippage, 0,0, comment, magic);
OrderSelect (ticket, SELECT_BY_TICKET);
OrderModify (ticket, OrderOpenPrice (), sltpValue (Ask + stopLoss * Point, stopLoss), sltpValue (Bid-takeProfit * Point, takeProfit), 0);
}
}
}
if (countOrders (magic, OP_BUY) == 0)
{
if ((Ask-high) > = 0.005 & & long = = 0)
{
long + +;
if (isECN == false)
{
OrderSend (Symbol (), OP_BUY, lots, Ask, slippage, sltpValue (Ask-stopLoss * Point, stopLoss), sltpValue (Bid + takeProfit * Point, takeProfit), comment, magic);
}
if (isECN)
{
ticket = OrderSend (Symbol (), OP_BUY, lots, Ask, slippage, 0,0, comment, magic);
OrderSelect (ticket, SELECT_BY_TICKET);
OrderModify (ticket, OrderOpenPrice (), sltpValue (Bid-stopLoss * Point, stopLoss), sltpValue (Ask + takeProfit * Point, takeProfit), 0);
}
}
}
}
//----
(0) возврат;
}
//+------------------------------------------------------------------+
bool isGoodTime (string, string, Begin, End) {
if (TimeCurrent () > Localtime (Begin) & & TimeCurrent < Localtime () (End)) {
return (true);
}
return (false);
}
int countOrders (int, int oMagic oType) {
int count = 0;
for (int i = 0; i < OrdersTotal (); i ++) {
if (OrderSelect (i, SELECT_BY_POS)) {
if (OrderMagicNumber () == oMagic) {
if (OrderSymbol () = the = Symbol ()) {
if (OrderType () == oType || oType < 0) {
count ++;
}
}
}
}
}
return (count);
}
double sltpValue (double, int w1 w2)
{
if (w2 = = 0)
return (0);
return (NormalizeDouble (w1, Digits));
}
Советники Forex.com
Я идиот. Я написал это не в тот форум... и я не знаю, как переместить это в форум по программированию. Прошу прощения за неудобства; ошибка была непреднамеренной.
Я торгую на спот-форекс уже 3 года и разработал 2 советника. Эти советники прекрасно работают на Glocap, FXCM и Alpari (я резидент США, поэтому мой выбор брокеров несколько ограничен). Кроме того, мне нужен счет MT4 с комиссией, встроенной в спред (личное предпочтение).
Недавно я протестировал этих советников на демо-счете Forex.com (Gain Capital). Оба советника работали отлично и торговали в соответствии с запрограммированными правилами. Однако, когда я открыл реальный счет на Forex.com, советник №1 перестал работать должным образом, но советник №2 работает нормально. Советник №1 отлично работает в тестере стратегий Forex.com, но я знаю, что это не имеет большого значения. Все это очень странно для меня, потому что оба советника используют один и тот же код для открытия сделок (ошибка на советнике №1 возникает при попытке открытия сделок), установки размера лота, мониторинга сделок и закрытия сделок. Вот небольшая информация об обоих советниках:
Советник #1 EUR/JPY Использует индикатор Ichimoku
Советник №2 EUR/USD Использует 3 скользящие средние и MACD.
Как я уже говорил, советник №2 торгует отлично; он работает в соответствии с запрограммированными правилами. Когда советник №1 пытается открыть несколько сделок, я получаю следующее сообщение об ошибке: 2011.11.21 17:00:02 Ichimoku_1700Eastern EURJPYpro,H1: Ichimoku_Open EA for EURJPYpro: Ошибка открытия ордера BUY : (133) торговля отключена /// для 103.7210
Кроме того, когда советник №2 пытается разместить сделку, журнал экспертов всегда показывает, что std.lib загружается непосредственно перед сделками, которые выдают ошибку (этого не происходит с советником №1):2011.11.21 17:00:02 stdlib EURJPYpro,H1: loaded successfully
Вот последний кусочек этой головоломки: советник №2 будет открывать сделки, но не в 1700 по восточному времени. Все вылетающие ошибки возникали при попытке открытия сделок в 1700 по восточному времени (это может быть совпадением).
Я разобрал советник на части, набрал код с нуля, скопировал код из советника №1 в советник №2, и, похоже, ничего не помогло. Forex.com не хочет помочь, так как считает это "поддержкой советника", которую они не предлагают. То, что я могу найти в Интернете об этой ошибке, означает, что либо а) брокер не разрешает торговлю советниками (что, как я знаю, неправда), либо б) торговля отправляет стопы и/или лимиты, что не работает с брокером Instant Execution (торговля НЕ отправляет стопы или лимиты). Forex.com заявил, что они НЕ приостанавливают торговлю в любое время в течение торгового дня.
Мои вопросы к этой группе следующие:
1. Сталкивался ли кто-нибудь с этой проблемой?
2. Если да, то что вы сделали для ее решения?
3. Если вы никогда не сталкивались с этой проблемой, что, по вашему мнению, может быть ее причиной?
Я уверен, что это что-то простое, чего я просто не замечаю. Любые комментарии, рассказы о своем опыте и мысли с чужих слов будут очень признательны.