[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 999

 
Hola. ¿podría decirme qué insertar en el código del EA para optimizar el periodo de la EMA?
 
gawrik:
Hola. ¿podría decirme qué insertar en el código del EA para optimizar el periodo de la EMA?
¿Qué es el periodo EMA?
 
media móvil exp. periodo. ¿puedo lanzarlo aquí, puede alguien retocarlo?
 



#property copyright "hasgkhlhjgg"
#enlace de propiedad "http://www.efefrWRF.com"

#define PUNTO_DE_TOPOSICIÓN_MÍNIMA 10
#define MIN_TAKEPROFIT_POINT 10
#define MAGIC 316995

cadena externa sNombreExperto = "DGJJFYGJD";
extern int nAccount =0;
extern double dBuyStopLossPoint = 0;
extern double dSellStopLossPoint = 0;
extern double dBuyTakeProfitPoint = 0;
extern double dSellTakeProfitPoint = 0;
extern double dBuyTrailingStopPoint = 0;
extern double dSellTrailingStopPoint = 0;
extern double dLots = 0.03;
extern int nSlippage = 4;
extern bool lFlagUseHourTrade = False;
extern inttern nFromHourTrade = 0;
extern intNToHourTrade = 23;
extern bool lFlagUseSound = True;
extern string sSoundFileName = "alert.wav";
color externo colorOpenBuy = Azul;
extern colorCloseBuy = Aqua;
extern colorOpenSell = Rojo;
extern colorCloseSell = Aqua;


void deinit() {
Comentario(");
}

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int inicio(){
si (lFlagUseHourTrade){
if (!(Hour()>=nFromHourTrade && Hour()<=nToHourTrade)) {
Comentario("¡Aún no ha llegado la hora del comercio!");
return(0);
}
}

if(Bares < 100){
Print("barras menos de 100");
return(0);
}

if(nCuenta > 0 && nCuenta != Número de cuenta()){
Comentario("Comercio en la cuenta : "+Número de cuenta()+" ¡Prohibido!");
return(0);
}

if((dBuyStopLossPoint > 0 && dBuyStopLossPoint < MIN_STOPLOSS_POINT) ||
(dSellStopLossPoint > 0 && dSellStopLossPoint < MIN_STOPLOSS_POINT)){
Print("StopLoss inferior a " + MIN_STOPLOSS_POINT);
return(0);
}
if((dBuyTakeProfitPoint > 0 && dBuyTakeProfitPoint < MIN_TAKEPROFIT_POINT) ||
(dSellTakeProfitPoint > 0 && dSellTakeProfitPoint < MIN_TAKEPROFIT_POINT)){
Print("TakeProfit inferior a " + MIN_TAKEPROFIT_POINT);
return(0);
}

double diMA0=iMA(NULL,1,15,0,MODE_EMA,PRICE_CLOSE,0);
double diMA1=iMA(NULL,1,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA2=iMA(NULL,1,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA3=iMA(NULL,1,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA4=iMA(NULL,1,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA5=iMA(NULL,1,100,0,MODE_EMA,PRICE_CLOSE,0);
double diMA6=iMA(NULL,5,15,0,MODE_EMA,PRICE_CLOSE,0);
double diMA7=iMA(NULL,5,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA8=iMA(NULL,5,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA9=iMA(NULL,5,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA10=iMA(NULL,5,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA11=iMA(NULL,5,100,0,MODE_EMA,PRICE_CLOSE,0);
double diMA12=iMA(NULL,15,15,0,MODE_EMA,PRICE_CLOSE,0);
double diMA13=iMA(NULL,15,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA14=iMA(NULL,15,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA15=iMA(NULL,15,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA16=iMA(NULL,15,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA17=iMA(NULL,15,100,0,MODE_EMA,PRICE_CLOSE,0);
double diMA18=iMA(NULL,30,15,0,MODE_EMA,PRICE_CLOSE,0);
double diMA19=iMA(NULL,30,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA20=iMA(NULL,30,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA21=iMA(NULL,30,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA22=iMA(NULL,30,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA23=iMA(NULL,30,100,0,MODE_EMA,PRICE_CLOSE,0);
double diMA24=iMA(NULL,60,15,0,MODE_EMA,PRICE_CLOSE,0);
double diMA25=iMA(NULL,60,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA26=iMA(NULL,60,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA27=iMA(NULL,60,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA28=iMA(NULL,60,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA29=iMA(NULL,60,100,0,MODE_EMA,PRICE_CLOSE,0);
double diMA30=iMA(NULL,60,15,0,MODE_EMA,PRICE_CLOSE,0);
double diMA31=iMA(NULL,60,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA32=iMA(NULL,1,15,0,MODE_EMA,PRICE_CLOSE,0);
double diMA33=iMA(NULL,1,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA34=iMA(NULL,1,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA35=iMA(NULL,1,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA36=iMA(NULL,1,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA37=iMA(NULL,1,100,0,MODE_EMA,PRICE_CLOSE,0);
double diMA38=iMA(NULL,5,15,0,MODE_EMA,PRICE_CLOSE,0);
double diMA39=iMA(NULL,5,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA40=iMA(NULL,5,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA41=iMA(NULL,5,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA42=iMA(NULL,5,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA43=iMA(NULL,5,100,0,MODE_EMA,PRICE_CLOSE,0);
double diMA44=iMA(NULL,15,15,0,MODE_EMA,PRICE_CLOSE,0);
double diMA45=iMA(NULL,15,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA46=iMA(NULL,15,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA47=iMA(NULL,15,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA48=iMA(NULL,15,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA49=iMA(NULL,15,100,0,MODE_EMA,PRICE_CLOSE,0);
double diMA50=iMA(NULL,30,15,0,MODE_EMA,PRICE_CLOSE,0);
double diMA51=iMA(NULL,30,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA52=iMA(NULL,30,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA53=iMA(NULL,30,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA54=iMA(NULL,30,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA55=iMA(NULL,30,100,0,MODE_EMA,PRICE_CLOSE,0);
double diMA56=iMA(NULL,60,15,0,MODE_EMA,PRICE_CLOSE,0);
double diMA57=iMA(NULL,60,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA58=iMA(NULL,60,29,0,MODE_EMA,PRICE_CLOSE,0);
double diMA59=iMA(NULL,60,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA60=iMA(NULL,60,50,0,MODE_EMA,PRICE_CLOSE,0);
double diMA61=iMA(NULL,60,100,0,MODE_EMA,PRICE_CLOSE,0);
double diMA62=iMA(NULL,60,15,0,MODE_EMA,PRICE_CLOSE,0);
double diMA63=iMA(NULL,60,29,0,MODE_EMA,PRICE_CLOSE,0);


if(AccountFreeMargin() < (1000*dLots)){
Print("No tenemos dinero. Margen libre = " + AccountFreeMargin());
return(0);
}

bool lFlagBuyOpen = false, lFlagSellOpen = false, lFlagBuyClose = false, lFlagSellClose = false;

lFlagBuyOpen = (diMA0>diMA1 && diMA2>diMA3 && diMA4>diMA5 && diMA6>diMA7 && diMA8>diMA9 && diMA10>diMA11 && diMA12>diMA13 && diMA14>diMA15 && diMA16>diMA17 && diMA18>diMA19 && diMA20>diMA21 && diMA22>diMA23 && diMA24>diMA25 && diMA26>diMA27 && diMA28>diMA29);
lFlagSellOpen = (diMA32<diMA33 && diMA34<diMA35 && diMA36<diMA37 && diMA38<diMA39 && diMA40<diMA41 && diMA42<diMA43 && diMA44<diMA45 && diMA46<diMA47 && diMA46<diMA47; y diMA46<diMA47 && diMA48<diMA49 && diMA50<diMA51 && diMA52<diMA53 && diMA54<diMA55 && diMA56<diMA57 && diMA58<diMA59 && diMA60<diMA61);
lFlagBuyClose = (diMA30<diMA31);
lFlagSellClose = (diMA62>diMA63);

if (!ExistPositions()){

si (lFlagBuyOpen){
OpenBuy();
{ return(0);
}

si (lFlagSellOpen){
OpenSell();
return(0);
}
}
if(ExistPositions()){
if(OrderType()==OP_BUY){
if(lFlagBuyClose){
bool flagCloseBuy = OrderClose(OrderTicket(), OrderLots(), Bid, nSlippage, colorCloseBuy);
if (flagCloseBuy && lFlagUseSound)
PlaySound(sSoundFileName);
return(0);
}
}
if(OrderType()==OP_SELL){
if(lFlagSellClose){
bool flagCloseSell = OrderClose(OrderTicket(), OrderLots(), Ask, nSlippage, colorCloseSell);
if (flagCloseSell && lFlagUseSound)
PlaySound(sSoundFileName);
return(0);
}
}
}

if (dBuyTrailingStopPoint > 0 || dSellTrailingStopPoint > 0){

for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
bool lMagic = true;
if (MAGIC > 0 && OrderMagicNumber() != MAGIC)
lMagic = false;

if (OrderSymbol()==Symbol() && lMagic) {
if (OrderType()==OP_BUY && dBuyTrailingStopPoint > 0) {
if (Bid-OrderOpenPrice() > dBuyTrailingStopPoint*Point) {
si (OrderStopLoss()<Bid-dBuyTrailingStopPoint*Point)
ModifyStopLoss(Bid-dBuyTrailingStopPoint*Point);
}
}
if (OrderType()==OP_SELL) {
if (OrderOpenPrice()-Ask>dSellTrailingStopPoint*Point) {
if (OrderStopLoss()>Ask+dSellTrailingStopPoint*Point || OrderStopLoss()==0)
ModifyStopLoss(Ask+dSellTrailingStopPoint*Point);
}
}
}
}
}
}
retorno (0);
}

bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
bool lMagic = true;

if (MAGIC > 0 && OrderMagicNumber() != MAGIC)
lMagic = false;

if (OrderSymbol()==Symbol() && lMagic) {
return(True);
}
}
}
return(false);
}

void ModifyStopLoss(double ldStopLoss) {
bool lFlagModify = OrderModify(OrderTicket(), OrderOpenPrice(), ldStopLoss, OrderTakeProfit(), 0, CLR_NONE);
if (lFlagModify && lFlagUseSound)
PlaySound(sSoundFileName);
}

void OpenBuy() {
double dStopLoss = 0, dTakeProfit = 0;

si (dBuyStopLossPoint > 0)
dStopLoss = Bid-dBuyStopLossPoint*Point;

si (dBuyTakeProfitPoint > 0)
dTakeProfit = Oferta + dBuyTakeProfitPoint * Punto;

int numorder = OrderSend(Symbol(), OP_BUY, dLots, Ask, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);

if (numorder > -1 && lFlagUseSound)
PlaySound(sSoundFileName);
}

void OpenSell() {
double dStopLoss = 0, dTakeProfit = 0;

si (dSellStopLossPoint > 0)
dStopLoss = Ask+ dSellStopLossPoint*Point;

si (dSellTakeProfitPoint > 0)
dTakeProfit = Ask-dSellTakeProfitPoint*Point;

int numorder = OrderSend(Symbol(),OP_SELL, dLots, Bid, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenSell);

if (numorder > -1 && lFlagUseSound)
PlaySound(sSoundFileName);
}

Sólo quiero usarlo en diferentes pares, pero está diseñado para EURUSD, por lo que no puedo ajustarlo manualmente, ni moral, ni físicamente

 
tanto en la apertura como en el cierre de la corredera
 
¿alguien puede ayudar?
 

¡Buenos días!

¿Podría decirme cómo hacer salir dos parámetros calculados de un cálculo de función? Si he entendido bien - la función return() devuelve sólo un parámetro especificado en sus paréntesis.

double РасчётТЛвверх(int a, double Цена1 Син)
        {
          double МА23 = iMA(NULL,0,23,0,MODE_EMA,PRICE_CLOSE,a),
                 
                 MМА23[17];
                 
                 MМА23[0]=МА23-603*Point;
                 MМА23[1]=МА23-377*Point;
                 MМА23[2]=МА23-233*Point;
                 MМА23[3]=МА23-144*Point;
                 MМА23[4]=МА23-89*Point;
                 MМА23[5]=МА23-55*Point;
                 MМА23[6]=МА23-34*Point;
                 MМА23[7]=МА23-21*Point;
                 MМА23[8]=МА23;
                 MМА23[9]=МА23+21*Point;
                 MМА23[10]=МА23+34*Point;
                 MМА23[11]=МА23+55*Point;
                 MМА23[12]=МА23+89*Point;
                 MМА23[13]=МА23+144*Point;
                 MМА23[14]=МА23+233*Point;
                 MМА23[15]=МА23+377*Point;
                 MМА23[16]=МА23+603*Point;
  
          for(int i=0;i<=16;i++)
            {
              if(NormalizeDouble(Цена1 Син+8*Point,Digits)<=NormalizeDouble(MМА23[i],Digits))
                {
                  double ТЛвверх=MМА23[i+5];
                  double БезУбMМА23 вверх = MМА23[i+4];
                  break;
                    
                      
                }
            }
         
          
                
         return(ТЛвверх);
        }
//--------------------------------------------------------------------

Sólo puedo emitir TLvup. Y también quiero usar BezubMMA23up. Pero si escribo así - return(TLup, BezUbMMA23up) o return(TLup; BezUbMMA23up), obtengo un error. La función se llama como doble TL-up=CalcularTL-up(a,Precio1Cin);

¿Cómo llamar para utilizar tanto TLup como BezUbMMA23up? ¿O para el cálculo del parámetro WithoutMMA23up debo escribir por separado el código dado de nuevo y la salida return( WithoutMMA23up) ?

 
Por ejemplo, hacer una Variable global e insertar el resultado de la función allí...
 
Por lo tanto, todavía hay que obtener dos resultados del cálculo. El código adjunto sólo produce uno. ¿Cómo puedo emitir dos?
 
Gracias a todos, encontré la respuesta aquí - https://www.mql5.com/ru/articles/1496