Si trabajas a precios de apertura, basta con comprobarlo en la apertura de un nuevo bar.
int start(){if(! NevBar())return(0);//.......return(0);}bool NevBar(){staticint prevtime=0;if( prevtime==Time[0])return(false);
prevtime=Time[0];return(true);}
Así es. Y si la apertura es posible a otros precios. Deberíamos utilizar otros mecanismos.
Si sólo se puede abrir una posición por un símbolo y un marco temporal, debemos controlar el número de posiciones abiertas.
int CountOrder[6];// Функция формирует массив с количеством открытых позиций по каждому виду ордеров.//===============================================================================int Order_Count_Calculate(string _Symbol,int _Magic,int _OP=-1){ArrayInitialize( Order_Count,0);for(int i =OrdersTotal()-1; i >=0; i--){if(!OrderSelect( i, SELECT_BY_POS, MODE_TRADES))continue;if(OrderSymbol()!= _Symbol)continue;if(OrderMagicNumber()!= _Magic)continue;
Order_Count[OrderType()]++;}if(_OP>=0)return( Order_Count[_OP]);return(0);}
Ahora, comprobando los valores de los elementos necesarios del array, sabemos cuántas posiciones de este tipo están abiertas.
Tengo esto en el código, pero no entiendo este array, ¿cómo detectará si hubo una orden en esta barra y se cerró, y esperaremos a una nueva barra?
¿Cómo lo explico? Puede que me haya expresado mal o haya entendido mal la función....
1) Si abrimos una orden en la barra cero y ya está cerrada, entonces no abrimos otra orden en esta barra aunque haya una señal para abrirla porque ya hemos tenido una operación en esta barra y ya está cerrada.
En cada barra se permite abrir sólo una operación, si hubiera una operación en esta barra, no abrimos la orden, ¿cómo hacer?
Ayuda a la gente.....)) Ya me estoy derritiendo \\\\\\\\>>>>
Tengo esto en mi código, no entiendo cómo va a detectar que había una orden en esta barra y se cerró y habrá que esperar a una nueva barra?
¿Cómo lo explico? Puede que me haya expresado mal o haya entendido mal la función....
1) Si abrimos una orden en la barra cero y ya está cerrada, entonces no abrimos otra orden en esta barra aunque haya una señal para abrirla porque ya hemos tenido una operación en esta barra y ya está cerrada; sólo esperamos a la siguiente barra.
En cada barra se permite abrir sólo una operación, si hubiera una operación en esta barra, no abrimos la orden, ¿cómo hacer?
Ayuda a la gente.....)) Ya me estoy derritiendo \\\\\\\\>>>>
Aquí estoy tratando de escribir un asesor... Sólo estoy empezando a aprender... El error 4062 aparece en el probador...(ERR_STRING_PARAMETER_EXPECTED - 4062 - se espera un parámetro de tipo cadena)
No sé dónde arreglarlo. Puede alguien local mirar el código:)
externdouble Lots =0.9;//лотexterndouble StopLoss =70;externdouble DecreaseFactor =80;externdouble MaximumRisk =0.014;externdouble MaximumLots =100;//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+double GetSizeLot()//оптимизация лотов{double Lot = Lots;int cycle;int prof =0;int orders = HistoryTotal();// history orders totalint losses =0;// number of losses orders without a breakint vinn =0;int i = orders;//---- select lot size
Lot =NormalizeDouble(AccountFreeMargin()* MaximumRisk /100,1);//----if(AccountFreeMargin()<=14)
DecreaseFactor =14;//----if(AccountFreeMargin()>10000)
DecreaseFactor =60;//----if( DecreaseFactor >0&& orders > DecreaseFactor){//----for( cycle =1; cycle < DecreaseFactor; cycle++){
i--;//----if(OrderSelect( i, SELECT_BY_TICKET, MODE_HISTORY)==false){Print("Error in history!");break;}//----if(OrderCloseTime()>0){
prof = prof +OrderProfit();if(OrderProfit()<=0)
losses++;else
vinn++;}}if( prof <=0&& losses > vinn)
Lot =0.1;if( prof <=0&& vinn > losses)
Lot = Lot -(0.1* losses);if( prof >0&& losses > vinn){
Lot = Lot +(0.1*NormalizeDouble( vinn /4,0.1));}if( prof >0&& losses <= vinn ){
Lot = Lot +(0.1*NormalizeDouble( vinn /2,0.1));}}if(AccountFreeMargin()<300|| Lot <0.1)
Lot =0.1;if( Lot*1275>=AccountFreeMargin())
Lot =NormalizeDouble(AccountFreeMargin()* MaximumRisk /100,1);if( MaximumLots !=0&& Lot > MaximumLots)
Lot = MaximumLots;if( DecreaseFactor > orders)
Lot = Lots;return( Lot);}//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+ int start(){double glav1, sig1, glav2, sig2;int cnt, ticket, total;
glav1 =iCustom(NULL,0,"i_Trend",0,1);
sig1 =iCustom(NULL,0,"i_Trend",1,1);
glav2 =iCustom(NULL,0,"i_Trend",0,2);
sig2 =iCustom(NULL,0,"i_Trend",1,2);
total =OrdersTotal();// проверяем есть ли открытые позицииif( total <1){if(AccountFreeMargin()<(500* Lots))// проверяем денежки на счету{Print("Денег почти нет, осталось всего: ",AccountFreeMargin());return(0);}}// проверяем открытие позиции на покупкуif(( glav2< sig2)&&( glav1> sig1)){OrderSend(Symbol(),OP_BUY, GetSizeLot(),Ask,3,Ask- StopLoss*Point,"AlanMod expert",16384,0,Green);return(0);}// проверяем возможность открытия на продажуif(( glav2> sig2)&&( glav1< sig1)){OrderSend(Symbol(),OP_SELL, GetSizeLot(),Bid,3,Bid+ StopLoss*Point,"AlanMod expert",16384,0,Red);return(0);}for( cnt =0; cnt < total; cnt++){OrderSelect( cnt, SELECT_BY_POS, MODE_TRADES);if(OrderType()<=OP_SELL&&// проверка открытой позиции OrderSymbol()==Symbol())// проверка с нашего ли она графика{if(OrderType()==OP_BUY)// если открыта позиция на покупку{if( glav1< sig1)// проверяем закрывать или нет?{OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);// закрылиreturn(0);// сваливаем}}else// если эта позиция на продажу{if( glav1> sig1)//проверяем закрывать иль нет?{OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);// закрылиreturn(0);// сваливаем}}}}}
Aquí estoy tratando de escribir un asesor... Sólo estoy empezando a aprender... El error 4062 aparece en el probador...(ERR_STRING_PARAMETER_EXPECTED - 4062 - se espera un parámetro de tipo cadena)
No sé dónde arreglarlo. Que alguno de los chicos de la zona revise el código:)
1) double NormalizeDouble( double value, int digits), y tienes (vinn/2, 0.1)
No he encontrado la página.
Tampoco pude encontrarlo. No importa.
Si trabajas a precios de apertura, basta con comprobarlo en la apertura de un nuevo bar.
Así es. Y si la apertura es posible a otros precios. Deberíamos utilizar otros mecanismos.
Si sólo se puede abrir una posición por un símbolo y un marco temporal, debemos controlar el número de posiciones abiertas.
Ahora, comprobando los valores de los elementos necesarios del array, sabemos cuántas posiciones de este tipo están abiertas.
Por ejemplo (ejemplo de fijación de un stop de compra) :
(no es necesario en absoluto que el precio fijado esté en el flujo de cotizaciones para establecer una orden pendiente.
Puede ir con el precio actual o con cualquier precio, siempre que se adhiera al nivel de parada desde el PRECIO ACTUAL HASTA EL PRECIO DE PARADA)
( 'EURUSD - Tendencias, previsiones y consecuencias' )
En lugar de
double priceBUY=..... ....
introduzca su fórmula
EH... ¡muchas gracias especialmente por el código adjunto! Justo lo que recetó el médico. ))))
Tampoco pude encontrarlo. No importa.
Si trabajas a precios de apertura, basta con comprobarlo en la apertura de un nuevo bar.
Así es. Y si la apertura es posible a otros precios. Deberíamos utilizar otros mecanismos.
Si sólo se puede abrir una posición por un símbolo y un marco temporal, debemos controlar el número de posiciones abiertas.
Ahora, comprobando los valores de los elementos necesarios del array, sabemos cuántas posiciones de este tipo están abiertas.
Tengo esto en el código, pero no entiendo este array, ¿cómo detectará si hubo una orden en esta barra y se cerró, y esperaremos a una nueva barra?
¿Cómo lo explico? Puede que me haya expresado mal o haya entendido mal la función....
1) Si abrimos una orden en la barra cero y ya está cerrada, entonces no abrimos otra orden en esta barra aunque haya una señal para abrirla porque ya hemos tenido una operación en esta barra y ya está cerrada.
En cada barra se permite abrir sólo una operación, si hubiera una operación en esta barra, no abrimos la orden, ¿cómo hacer?
Ayuda a la gente.....)) Ya me estoy derritiendo \\\\\\\\>>>>
Tengo esto en mi código, no entiendo cómo va a detectar que había una orden en esta barra y se cerró y habrá que esperar a una nueva barra?
¿Cómo lo explico? Puede que me haya expresado mal o haya entendido mal la función....
1) Si abrimos una orden en la barra cero y ya está cerrada, entonces no abrimos otra orden en esta barra aunque haya una señal para abrirla porque ya hemos tenido una operación en esta barra y ya está cerrada; sólo esperamos a la siguiente barra.
En cada barra se permite abrir sólo una operación, si hubiera una operación en esta barra, no abrimos la orden, ¿cómo hacer?
Ayuda a la gente.....)) Ya me estoy derritiendo \\\\\\\\>>>>
Consulta el hilo de Igor KIM 'Funciones útiles de KimIV'. Una de las funciones responderá a su pregunta
Aquí estoy tratando de escribir un asesor... Sólo estoy empezando a aprender... El error 4062 aparece en el probador...(ERR_STRING_PARAMETER_EXPECTED - 4062 - se espera un parámetro de tipo cadena)
No sé dónde arreglarlo. Puede alguien local mirar el código:)
Aquí estoy tratando de escribir un asesor... Sólo estoy empezando a aprender... El error 4062 aparece en el probador...(ERR_STRING_PARAMETER_EXPECTED - 4062 - se espera un parámetro de tipo cadena)
No sé dónde arreglarlo. Que alguno de los chicos de la zona revise el código:)
1) double NormalizeDouble( double value, int digits), y tienes (vinn/2, 0.1)
2) OrderSend(Symbol(), OP_BUY, GetSizeLot(), Ask, 3, Ask - StopLoss*Point,NO TAKE_profit, "AlanMod expert", 16384, 0, Green);
¿Cómo se nombran los búferes en los indicadores personalizados?