Перекомпилировать - открыть в редакторе из терминала и нажать "компилировать".))
Только и всего? Я думал, что-то еще в коде изменять...
Перекомпилировать - открыть в редакторе из терминала и нажать "компилировать".))
Стукни мне в скайп и все починим! Я вставил в своего сова твой индюк и он не выдает тормозов. Там у тебя в коде запускаются функции какие-то по названию похожие на проверку наличия ордеров - в них какого-то зацикливания быть не может или доп обращения к индюкам?Только и всего? Я думал, что-то еще в коде изменять...
Здравствуйте!Дело в том,что я только начал изучать MQL4.У меня ещё каша в голове от количества информации.У меня есть шаблон для написания советников.Но я ещё не всё могу сообразить как прописывать условия.Помогите,пожалуйста.Чисто для примера покажите как правильно прописать покупку и продажу по этому индикатору.По стрелкам,которые он ставит.Шаблон и индикатор прилагаю.Я так быстрей врублюсь как это делается.Спасибо за понимание!
Подскажите кусок кода для советника. В заданное мною время Х часов Х минут открывал ордер Х объемом, на селл или бай(выбор) и мейджик.
extern string start_time = "08:00";
int time_shift;
bool first_tick_chaked=false;
//////////////////////////////////////////////////////////////
int OnInit()
{
first_tick_chaked=false;
return(INIT_SUCCEEDED);
}
////////////////////////////////////////////////////////////
void OnTick()
{
if(!first_tick_chaked)
{
first_tick_chaked=true;
EventSetTimer(1);
time_shift=int(TimeLocal()-TimeCurrent());
}
}
////////////////////////////////////////////////////////////
void OnTimer()
{
string TC_s=TimeToString(TimeLocal()-time_shift,TIME_MINUTES);
if(OrdersTotal()==0 && TC_s==start_time) OrderSend(...);
}
extern int MaxOrdersBUY=1;
extern int MaxOrdersSELL=1;
//-------------------------------
int start()
{
//-------------------------------
if(A>B)
{
OrderSend(Symbol(),OP_SELL,...);
{
if(A<B)
{
OrderSend(Symbol(),OP_BUY,...);
}
//-------------------------------
}
суть в следующем, нужно разделить максимальное число ордеров - отдельно по бай и селл,как это сделать,не могу понять,и желательно в старом 509 билде,новые еще не освоил..
для ясности привожу кусок кода,куда нужно втиснуть нужный код:
PHP:extern int MaxOrdersBUY=1; extern int MaxOrdersSELL=1; //------------------------------- int start() { //------------------------------- if(A>B) { OrderSend(Symbol(),OP_SELL,...); { if(A<B) { OrderSend(Symbol(),OP_BUY,...); } //------------------------------- }
//+------------------------------------------------------------------+
extern int MaxOrdersBUY = 1;
extern int MaxOrdersSELL = 1;
//+------------------------------------------------------------------+
int start()
{
int cnt_b = CountOrder(OP_BUY);
int cnt_s = CountOrder(OP_SELL);
if(A>B && cnt_b<MaxOrdersBUY)
{
OrderSend(Symbol(),OP_SELL,...);
{
if(A<B && cnt_s<MaxOrdersSELL)
{
OrderSend(Symbol(),OP_BUY,...);
}
//***************
}
//+------------------------------------------------------------------+
//| Count Order Type |
//+------------------------------------------------------------------+
int CountOrder(int type)
{
int i,cnt = 0;
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==type) cnt++;
}
}
}
return(cnt);
}
//+------------------------------------------------------------------+
Привет! Ты опередил меня на несколько секунд!Как вариант:
PHP код:
//+------------------------------------------------------------------+
extern int MaxOrdersBUY = 1;
extern int MaxOrdersSELL = 1;
//+------------------------------------------------------------------+
int start()
{
int cnt_b = CountOrder(OP_BUY);
int cnt_s = CountOrder(OP_SELL);
if(A>B && cnt_b<MaxOrdersBUY)
{
OrderSend(Symbol(),OP_SELL,...);
{
if(A<B && cnt_s<MaxOrdersSELL)
{
OrderSend(Symbol(),OP_BUY,...);
}
//***************
}
//+------------------------------------------------------------------+
//| Count Order Type |
//+------------------------------------------------------------------+
int CountOrder(int type)
{
int i,cnt = 0;
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==type) cnt++;
}
}
}
return(cnt);
}
//+------------------------------------------------------------------+
int start()
{
double OrdersBuy=0, OrdersSell=0;
for(int i=0;i<OrdersTotal();i++)
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES && OrderSymbol()==_Symbol))
{
if(OrderType()==OP_BUY) OrdersBuy++;
if(OrderType()==OP_SELL) OrdersSell++;
}
//-------------------------------
if(A>B && OrdersSell<MaxOrdersSELL)
{
OrderSend(Symbol(),OP_SELL,...);
}
if(A<B && OrdersBuy<MaxOrdersBUY)
{
OrderSend(Symbol(),OP_BUY,...);
}
Там в приведенном коде кривая скобка после первого ордерсенда не в ту сторону.для ясности привожу кусок кода,куда нужно втиснуть нужный код
спасиб за помощь вам и выше товарищу, скобку случайно наоборот нарисовал, в сове то нормальнаяТам в приведенном коде кривая скобка после первого ордерсенда не в ту сторону.
extern int MaxOrdersMagic1=1;
extern int MaxOrdersMagic2=1;
//--------------------------------------------------
int start()
{
//------
if(A>B)
{
OrderSend(Symbol(),OP_BUY,...,Magic1,...);
}
if(A<B)
{
OrderSend(Symbol(),OP_SELL,...,Magic1,...);
}
//---------------------------------------------------
if(C>D)
{
OrderSend(Symbol(),OP_BUY,...,Magic2,...);
}
if(C<D)
{
OrderSend(Symbol(),OP_SELL,...,Magic2,...);
}
//------
}
возник схожий вопрос с предыдущим, сам не могу понять, давно не смотрел код, малость "форму" потерял..
суть такая, нужно разделить по магику ордера, чтобы максимальное число открытых ордеров в каждом магике было своё,без разницы какой тип открытого ордера,ниже примерный кусок кода,куда нужно втиснуть нужный код(всем заранее спасибо!):
PHP:extern int MaxOrdersMagic1=1; extern int MaxOrdersMagic2=1; //-------------------------------------------------- int start() { //------ if(A>B) { OrderSend(Symbol(),OP_BUY,...,Magic1,...); } if(A<B) { OrderSend(Symbol(),OP_SELL,...,Magic1,...); } //--------------------------------------------------- if(C>D) { OrderSend(Symbol(),OP_BUY,...,Magic2,...); } if(C<D) { OrderSend(Symbol(),OP_SELL,...,Magic2,...); } //------ }
//+------------------------------------------------------------------+
extern int MaxOrdersBUY = 1;
extern int MaxOrdersSELL = 1;
extern int Magic1 = 1;
extern int Magic2 = 2;
//+------------------------------------------------------------------+
int start()
{
int cnt_b_mg1 = CountOrder(OP_BUY,Magic1);
int cnt_s_mg1 = CountOrder(OP_SELL,Magic1);
int cnt_b_mg2 = CountOrder(OP_BUY,Magic2);
int cnt_s_mg2 = CountOrder(OP_SELL,Magic2);
if(A>B && cnt_b_mg1<MaxOrdersBUY)
{
OrderSend(Symbol(),OP_SELL,..Magic1.);
}
if(A<B && cnt_s_mg1<MaxOrdersSELL)
{
OrderSend(Symbol(),OP_BUY,..Magic1.);
}
//---
if(A>B && cnt_b_mg2<MaxOrdersBUY)
{
OrderSend(Symbol(),OP_SELL,..Magic2.);
}
if(A<B && cnt_s_mg2<MaxOrdersSELL)
{
OrderSend(Symbol(),OP_BUY,..Magic2.);
}
//***************
}
//+------------------------------------------------------------------+
//| Count Order Type |
//+------------------------------------------------------------------+
int CountOrder(int type, int mag)
{
int i,cnt = 0;
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==mag)
{
if(OrderType()==type) cnt++;
}
}
}
return(cnt);
}
//+------------------------------------------------------------------+
На основе ранее представленного кода:
надеюсь, смысл понятен, а все остальное зависит от составления условия...
не совсем понятен смысл считать сколько BUY и SELL ордеровlease:, если я написал - что это не важно в данном случае,важна лишь сортировка по магику, а точнее чтобы разделить по 2м магикам число открытых позиций..
ну лан,может сам додумаюсь относительно деталей или кто еще ответит..
cnt_mg1 = cnt_b_mg1+cnt_s_mg1;
//+------------------------------------------------------------------+
//| Count Order |
//+------------------------------------------------------------------+
int CountOrder(int mag)
{
int i,cnt = 0;
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==mag)
{
if(OrderType()<=1) cnt++;
}
}
}
return(cnt);
}
//+------------------------------------------------------------------+
int cnt_mg1 = CountOrder(Magic1);
int cnt_mg2 = CountOrder(Magic2);
Ну, у меня все то же самое:суть такая, нужно разделить по магику ордера, чтобы максимальное число открытых ордеров в каждом магике было своё,без разницы какой тип открытого ордера,ниже примерный кусок кода,куда нужно втиснуть нужный код
extern int Magic1=1;
extern int Magic2=2;
extern int MaxOrdersMagic1=1;
extern int MaxOrdersMagic2=1;
---------------------------------------------
int start()
{
//-------------------------------
double OrdersMagic1=0, OrdersMagic2=0;
for(int i=0;i<OrdersTotal();i++)
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES && OrderSymbol()==_Symbol))
{
if(OrderMagicNumber()==Magic1) OrdersMagic1++;
if(OrderMagicNumber()==Magic2) OrdersMagic2++;
}
//------
if(A>B && OrdersMagic1<MaxOrdersMagic1)
{
OrderSend(Symbol(),OP_BUY,...,Magic1,...);
}
if(A<B && OrdersMagic1<MaxOrdersMagic1)
{
OrderSend(Symbol(),OP_SELL,...,Magic1,...);
}
//---------------------------------------------------
if(C>D && OrdersMagic2<MaxOrdersMagic2)
{
OrderSend(Symbol(),OP_BUY,...,Magic2,...);
}
if(C<D && OrdersMagic2<MaxOrdersMagic2)
{
OrderSend(Symbol(),OP_SELL,...,Magic2,...);
}
//------
}
Ну, у меня все то же самое:суть такая, нужно разделить по магику ордера, чтобы максимальное число открытых ордеров в каждом магике было своё,без разницы какой тип открытого ордера,ниже примерный кусок кода,куда нужно втиснуть нужный код
extern int Magic1=1;
extern int Magic2=2;
extern int MaxOrdersMagic1=1;
extern int MaxOrdersMagic2=1;
---------------------------------------------
int start()
{
//-------------------------------
double OrdersMagic1=0, OrdersMagic2=0;
for(int i=0;i<OrdersTotal();i++)
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES && OrderSymbol()==_Symbol) && OrderType()<=1)
{
if(OrderMagicNumber()==Magic1) OrdersMagic1++;
if(OrderMagicNumber()==Magic2) OrdersMagic2++;
}
//------
if(A>B && OrdersMagic1<MaxOrdersMagic1)
{
OrderSend(Symbol(),OP_BUY,...,Magic1,...);
}
if(A<B && OrdersMagic1<MaxOrdersMagic1)
{
OrderSend(Symbol(),OP_SELL,...,Magic1,...);
}
//---------------------------------------------------
if(C>D && OrdersMagic2<MaxOrdersMagic2)
{
OrderSend(Symbol(),OP_BUY,...,Magic2,...);
}
if(C<D && OrdersMagic2<MaxOrdersMagic2)
{
OrderSend(Symbol(),OP_SELL,...,Magic2,...);
}
//------
}
спасибо за помощь вам и выше товарищу!Ну, у меня все то же самое:
PHP:extern int Magic1=1; extern int Magic2=2; extern int MaxOrdersMagic1=1; extern int MaxOrdersMagic2=1; --------------------------------------------- int start() { //------------------------------- double OrdersMagic1=0, OrdersMagic2=0; for(int i=0;i<OrdersTotal();i++) if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES && OrderSymbol()==_Symbol) && OrderType()<=1) { if(OrderMagicNumber()==Magic1) OrdersMagic1++; if(OrderMagicNumber()==Magic2) OrdersMagic2++; } //------ if(A>B && OrdersMagic1<MaxOrdersMagic1) { OrderSend(Symbol(),OP_BUY,...,Magic1,...); } if(A<B && OrdersMagic1<MaxOrdersMagic1) { OrderSend(Symbol(),OP_SELL,...,Magic1,...); } //--------------------------------------------------- if(C>D && OrdersMagic2<MaxOrdersMagic2) { OrderSend(Symbol(),OP_BUY,...,Magic2,...); } if(C<D && OrdersMagic2<MaxOrdersMagic2) { OrderSend(Symbol(),OP_SELL,...,Magic2,...); } //------ }
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES && OrderSymbol()==_Symbol) && OrderType()<=1)
_Symbol
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)
extern int Magic1=1;
extern int Magic2=2;
extern int MaxOrdersMagic1=1;
extern int MaxOrdersMagic2=1;
---------------------------------------------
int start()
{
//-------------------------------
double OrdersMagic1=0, OrdersMagic2=0;
for(int i=0;i<OrdersTotal();i++)
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)
{
if(OrderMagicNumber()==Magic1) OrdersMagic1++;
if(OrderMagicNumber()==Magic2) OrdersMagic2++;
}
//------
if(OrdersMagic1<MaxOrdersMagic1)
{
if(A>B)
{
OrderSend(Symbol(),OP_BUY,...,Magic1,...);
}
if(A<B)
{
OrderSend(Symbol(),OP_SELL,...,Magic1,...);
}
}
//---------------------------------------------------
if(OrdersMagic1<MaxOrdersMagic1)
{
if(C>D)
{
OrderSend(Symbol(),OP_BUY,...,Magic2,...);
}
if(C<D)
{
OrderSend(Symbol(),OP_SELL,...,Magic2,...);
}
}
//------
}