Не могу понять че здесь не правильно,
Вообщем по задумке, хотел написать эксперта, который бы открывал по 1 ордеру, допустим buy, c tp=100 и tl=100, ждал пока он не закроется, не важно с профитом или без, и открывал новый sell c tp=100 и tl=100, и так по кругу пока деньги есть.
#property copyright "Copyright © 2006, MetaQuotes Software Corp." #property link "http://wolf002.narod.ru" extern double TakeProfit = 100; extern double TakeLost = 100; extern double Lots = 1; bool smena; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { bool smena=true; return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { int ticket,total; total = OrdersTotal(); if(total<1) { if (smena==true) smena=false; { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-TakeLost*Point,Ask+TakeProfit*Point,"My order #1",16384,0,Blue); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } else Print("Error opening BUY order : ",GetLastError()); return(0); } } else { smena=true; ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+TakeLost*Point,Bid-TakeProfit*Point,"My order #1",16384,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } else Print("Error opening SELL order : ",GetLastError()); return(0); } } return(0); //---- return(0);
Код по чему не пашет,
Во первых открывается сразу много ордеров, а не один, как было задумано.
Во вторых сначала отрывается buy, а потом все sell.
В третьих когда extern double Lots = 0.1; Выдается ошибку номер 131, это чето связаное с нормализацией лота. Но раньше так все работало.
Жду ВАШЕЙ ПОМОЩИ.
Так он и должен кучу орднеров открывать.
Надо контроль количества открытых ордеров делать. В форуме на эту тему много написано.
И переменную нужно для вида открытого ордера.
Например здесь
if (smena==true) smena=false; { .... }выражение в скобках будет выполняться всегда, т.е. независимо от значения smena
Всем спасибо вот рабочий код.
#property copyright "Copyright © 2006, MetaQuotes Software Corp." #property link "http://wolf002.narod.ru" extern double TakeProfit = 10; extern double TakeLost = 10; extern double Lots = 0.1; bool smena; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { bool smena=true; } //+------------------------------------------------------------------+ int start() { int ticket,total; total = OrdersTotal(); if(total<1) { if (smena == true) { RefreshRates(); ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-TakeLost*Point,Ask+TakeProfit*Point,"My order #1",16384,0,Blue); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()," smena= ",smena); smena=false; } else Print("Error opening BUY order : ",GetLastError()); return(0); } else { RefreshRates(); ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+TakeLost*Point,Bid-TakeProfit*Point,"My order #1",16384,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()," smena= ",smena); smena=true; } else Print("Error opening SELL order : ",GetLastError()); return(0); } } return(0); //---- return(0); } //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Не могу понять че здесь не правильно,
Вообщем по задумке, хотел написать эксперта, который бы открывал по 1 ордеру, допустим buy, c tp=100 и tl=100, ждал пока он не закроется, не важно с профитом или без, и открывал новый sell c tp=100 и tl=100, и так по кругу пока деньги есть.
Код по чему не пашет,
Во первых открывается сразу много ордеров, а не один, как было задумано.
Во вторых сначала отрывается buy, а потом все sell.
В третьих когда extern double Lots = 0.1; Выдается ошибку номер 131, это чето связаное с нормализацией лота. Но раньше так все работало.
Жду ВАШЕЙ ПОМОЩИ.