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

 
g.pociejewski:
[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 пробиты, соответственно.

Будьте здоровы,

 
Avasys:
Спасибо за ваш комментарий

Есть ли способ указать коду торговать только один раз в день и только при первом прорыве.

Автор этого кода очень занятой человек, он не может уделять много времени, как кажется.

помощь ценится

[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]

 
Pip:
Здравствуйте, Avasys,

Насколько я могу судить, с кодом все в порядке, исходя из вашего описания, он делает именно то, на что запрограммирован (покупает, когда Ask выше, чем high, и продает, когда bid ниже, чем low), в основном он продолжает покупать и продавать, когда high и low пробиты, соответственно.

Спасибо,

Спасибо за ваш комментарий

Есть ли способ указать коду торговать только один раз в день и только при первом прорыве.

Автор этого кода очень занятой человек, он не может уделять много времени, как кажется.

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

помощь приветствуется

 
g.pociejewski:
[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. Если вы никогда не сталкивались с этой проблемой, что, по вашему мнению, может быть ее причиной?

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

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