En concreto, aquí si ( OrderType( )==OP_BUY && OrderType( )==OP_SELL )
Bueno, por supuesto la orden puede ser tanto de compra como de venta, pero yo pondría ||
¡¡¡LOL!!! Sí, lo hice... De verdad...
if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point)
Recomiendo aclarar que es el punto y por qué se multiplica por 0.5? Es que la variante sin normalizar el doblete no es tan fiable si se compara con el cero. Aquí funciona.
Ticket es un tipo entero, OrderClose es booleano... mejor no hacerlo así.
el bucle while es infinito y sólo se borran las órdenes de mercado, si hay una pendiente, esta música será eterna. ¡¡¡Gracias!!! ¡¡¡¡!!!!
//+------------------------------------------------------------------+//| AsctrendBuySellExpert_v1.mq4 code by Newdigital |//| https://www.forex-tsd.com |//| using Gordago software http://www.gordago.com |//| - Asctrend code for this EA was taken from |//| AscTrend_NonLag EA coded by of Igorad. |//| - "Non-Trading Hours" on the screen fixing code by Locutus |//| from Updated DayTradingMM EA |//+------------------------------------------------------------------+#property copyright "newdigital"#property link "https://www.forex-tsd.com"#include <stderror.mqh> // библиотека ошибок#include <stdlib.mqh>externint MAGIC = 100111;
externstring PARAMETERS_EXPERT = "PARAMETERS EXPERT";
externcolor clOpenBuy = Blue;
externcolor clCloseBuy = Aqua;
externcolor clOpenSell = Red;
externcolor clCloseSell = Violet;
externcolor clModiBuy = Blue;
externcolor clModiSell = Red;
externstring Name_Expert = "AsctrendBuySellExpert";
externbool UseSound = False;
externstring NameFileSound = "alert.wav";
externstring PARAMETERS_FILTER = "PARAMETERS FILTER";
externbool UseHourTrade = False;
externint FromHourTrade = 8;
externint ToHourTrade = 18;
externstring PARAMETERS_TRADE = "PARAMETERS TRADE";
externdouble Lots = 0.10;
externint Slippage = 4;
externdouble lStopLoss = 1000;
externdouble sStopLoss = 1000;
externdouble lTakeProfit = 1000;
externdouble sTakeProfit = 1000;
externdouble lTrailingStop = 1000;
externdouble sTrailingStop = 1000;
externstring PARAMETERS_INDICATOR_ONE = "ASCTrend";
externbool UseASCtrend = True;
externint RISK = 3;
int asctrend,asctrend1;
int ASCtrend,ASCtrend1;
void deinit() {
Comment("");
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int start(){
if (UseHourTrade){
if((Hour()>=FromHourTrade)&&(Hour()<=ToHourTrade))
Comment("Trading Hours");
else
{
Comment("Non-trading Hours");
return(0);
}
}
if(Bars<100){
Print("bars less than 100");
return(0);
}
if(lStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(lTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
if(sStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(sTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
if (UseASCtrend)
{
ASCtrend = ASCTrend(RISK);
bool ASCtrendBuy = ASCtrend>0 && ASCtrend1<0;
bool ASCtrendSell = ASCtrend<0 && ASCtrend1>0;
}
else {ASCtrendBuy = true; ASCtrendSell = true;}
if(AccountFreeMargin()<(1000*Lots)){
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (!ExistPositions()){
if ((ASCtrendBuy)){
OpenBuy();
return(0);
}
if ((ASCtrendSell)){
OpenSell();
return(0);
}
}
if (ExistPositions()){
if(OrderType()==OP_BUY){
if ((ASCtrendSell)){
CloseBuy();
return(0);
}
}
if(OrderType()==OP_SELL){
if ((ASCtrendBuy)){
CloseSell();
return(0);
}
}
}
TrailingPositionsBuy(lTrailingStop);
TrailingPositionsSell(sTrailingStop);
ASCtrend1=ASCtrend;
return (0);
}
bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
return(True);
}
}
}
return(false);
}
void TrailingPositionsBuy(int trailingStop) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_BUY) {
if (Bid-OrderOpenPrice()>trailingStop*Point) {
if (OrderStopLoss()<Bid-trailingStop*Point)
ModifyStopLoss(Bid-trailingStop*Point);
}
}
}
}
}
}
void TrailingPositionsSell(int trailingStop) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_SELL) {
if (OrderOpenPrice()-Ask>trailingStop*Point) {
if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0)
ModifyStopLoss(Ask+trailingStop*Point);
}
}
}
}
}
}
void ModifyStopLoss(double ldStopLoss) {
bool fm;
fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
void CloseBuy() {
bool fc;
fc=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
if (fc && UseSound) PlaySound(NameFileSound);
}
void CloseSell() {
bool fc;
fc=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
if (fc && UseSound) PlaySound(NameFileSound);
}
void OpenBuy() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossBuy();
ldTake = GetTakeProfitBuy();
lsComm = GetCommentForOrder();
BroCoOrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenBuy);
if (UseSound) PlaySound(NameFileSound);
}
void OpenSell() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossSell();
ldTake = GetTakeProfitSell();
lsComm = GetCommentForOrder();
BroCoOrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenSell);
if (UseSound) PlaySound(NameFileSound);
}
string GetCommentForOrder() { return(Name_Expert); }
double GetSizeLot() { return(Lots); }
double GetStopLossBuy() { return (Bid-lStopLoss*Point);}
double GetStopLossSell() { return(Ask+sStopLoss*Point); }
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); }
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }
int ASCTrend( int risk )
{
double smin, smax, bsmin, bsmax;
int len = 3 + 2*risk;
smin=Low[Lowest(NULL,0,MODE_LOW,len,1)];
smax=High[Highest(NULL,0,MODE_HIGH,len,1)];
bsmax = smax-(smax - smin)*(33.0-risk)/100.0;
bsmin = smin+(smax - smin)*(33.0-risk)/100.0;
asctrend = asctrend1;
if(Close[1]>bsmax) asctrend= 1;
if(Close[1]<bsmin) asctrend=-1;
asctrend1 = asctrend;
return(asctrend);
}
//+------------------------------------------------------------------+//| Функция для работы с дилинговым центром BroCo |//+------------------------------------------------------------------+int BroCoOrderSend(string symbol,
int cmd,
double volume,
double price,
int slippage,
double stoploss,
double takeprofit,
string comment,
int magic,
datetime expiration,
color arrow_color)
{
int ticket = OrderSend(symbol,cmd, volume, price, slippage, 0, 0, comment, magic, expiration, arrow_color);
int check = -1;
if (ticket > 0 && (stoploss != 0 || takeprofit != 0)) {
if (!OrderModify(ticket, price, stoploss, takeprofit,expiration, arrow_color)) {
check = GetLastError();
if (check != ERR_NO_ERROR) {
Print("OrderModify error: ", ErrorDescription(check));
}
}
} else {
check = GetLastError();
if (check != ERR_NO_ERROR){
Print("OrderSend error: ",ErrorDescription(check));
}
}
return (ticket);
}
//----------------------------------------------------------------
Hola a todos. Me he encontrado con un antiguo experto que trabaja con el indicador asctrend. Me gustaría comprobar cómo se comporta este indicador en tiempo real, pero no siempre puedo seguir los puntos y mi trading no es completo. He comprobado el probador, hay una señal en cada punto, pero lo puso en una demo y se dio cuenta de la cosa que la demo se salta las señales, mientras que el registro no escribió nada para el experto, cavando en el código y no entendía lo que el problema :( tal vez alguien meter la nariz en lo que puede ser el problema?
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point) {
Alert("Позиция с тикетом #",OrderTicket()," закрыта по TakeProfit, закрываем остальные прозиции и удаляем отложенные ордера");
// Здесь код для закрытия всех открытых позиций (тоже в цикле)for ( int y=OrdersTotal()-1; y>=0; y--) {Alert ("Здесь код для закрытия всех открытых позиций (тоже в цикле)",y);
OrderSelect(y, SELECT_BY_POS );
if ( OrderType( )==OP_BUY || OrderType( )==OP_SELL ){
OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
Alert ("OrderClose-vse-2", GetLastError( ) ); C=0;A=1; }}
// Здесь код для удаления всех отложенных ордеров (также в цикле)for ( int f=OrdersTotal()-1; f>=0; f--) {Alert("Здесь код для удаления всех отложенных ордеров (также в цикле)",f);
OrderSelect(f, SELECT_BY_POS );
if ( OrderType( )==OP_BUYSTOP || OrderType( )==OP_SELLSTOP ){
OrderDelete(OrderTicket( )) ; Alert ("OrderDelete-vse-2", GetLastError( ) ); }} // CloseAll();
}
}
He escrito hasta ahora, y sólo se registra el primer mensaje de alerta
Después de reinstalar el terminal, MetaEditor dejó de funcionar. Sólo funciona si no se cambia nada en el código del indicador. Si se cambia algo, incluso el color de la línea, se genera un error:
El sistema operativo es Windows 7. Quién sabe, tal vez alguien se enfrentó a ese fallo. ¿Puede decirme qué hacer?
¡Código largo chicos! Me gustaría reiterar que el código de otra persona es, en primer lugar, un criptograma, ¡que aún está por descifrar! ¿Y eso es mucho trabajo? ¿Crees que algún programador quiere rebuscar en kilómetros de listados? Permítanme dar mi código a uno de ustedes sólo por tres mil líneas y pedir para eliminar un pequeño malentendido de este código. ¿Crees que sólo quieres meterte en mi cabeza? Lo vuelvo a dudar. Así que tengo una petición para usted: cuando formule una pregunta clave, describa el problema lo más brevemente posible y, al mismo tiempo, haga que la descripción sea suficiente para comprender su esencia. Si no, tu grito es un grito en el vacío. El código se puede adjuntar al correo. Todo esto es necesario y suficiente.
¡Saludos a todos!
Por favor, ayúdenme con este problema: no consigo que el indicador se redibuje con la aparición de una nueva barra (intervalo D). П
Tengo que reiniciarlo manualmente.
¿es posible descargar el indicador de onda zolliot
Por supuesto que sí. Tienes que encontrar y descargar
indicador de onda zlliot site:mql4.com
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Gracias, splxgf !!!!!!!!!!!!!!!
En concreto, aquí si ( OrderType( )==OP_BUY && OrderType( )==OP_SELL )
Bueno, por supuesto la orden puede ser tanto de compra como de venta, pero yo pondría ||
¡¡¡LOL!!! Sí, lo hice... De verdad...
if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point)
Recomiendo aclarar que es el punto y por qué se multiplica por 0.5? Es que la variante sin normalizar el doblete no es tan fiable si se compara con el cero. Aquí funciona.
Ticket es un tipo entero, OrderClose es booleano... mejor no hacerlo así.
el bucle while es infinito y sólo se borran las órdenes de mercado, si hay una pendiente, esta música será eterna. ¡¡¡Gracias!!! ¡¡¡¡!!!!
Chicos, decidme la diferencia ?????
if(OrderSymbol()!=Symbol())continue;
и
if(OrderSymbol()==Symbol())
???????????
Sí, no sé... Bueno, continue;debería enviar al bucle anterior, y probablemente pueda pasar hasta que coincida, dependiendo de cómo esté escrito.
¡¡¡¡¡¡¡Ayuda !!!!!!! ¡(mi post en la página anterior)!
Después de reinstalar el terminal, MetaEditor dejó de funcionar. Sólo funciona si no se cambia nada en el código del indicador. Si se cambia algo, incluso el color de la línea, se genera un error:
El sistema operativo es Windows 7. Quién sabe, tal vez alguien se enfrentó a ese fallo. ¿Puede decirme qué hacer?