Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Está bem, então se você usar
double stop;
stop=stoploss*Point();
Print(DoubleToString(stoploss));
Ao usar a função Point(), isto deve lhe dar o valor de sua parada e então você tem que adicioná-la ou subtraí-la de Bid e Ask respectivamente para lhe dar o nível de preço de sua parada.
O mesmo funciona para ter lucro, mas, claro, ao contrário.
Você pode verificar alguns dos EA's em base de código, há muitos exemplos e variações sobre como os codificadores fazem essas coisas em seus EA's.
Por exemplo, uma chamada Trailing Master https://www.mql5.com/en/code/16136
// 1. Main function
//-------------------------------------------------------------------------
void OnTick(void)
{
Comment("Copyright © 2016, Il Anokhin\n"+TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
//--- 1.1. Define pip -----------------------------------------------------
if(Digits==4 || Digits<=2) pip=Point;
if(Digits==5 || Digits==3) pip=Point*10;
//--- 1.2. Trailing -------------------------------------------------------
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderSymbol()==Symbol() && TS>0 && OrderProfit()>0)
{
if(UC==true && OrderComment()==Comm && UM==true && OrderMagicNumber()==Magic && OrderType()==OP_BUY && OrderOpenPrice()+TS*pip<=Bid && OrderStopLoss()<Bid-TS*pip) w=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TS*pip,OrderTakeProfit(),0);
if(UC==true && OrderComment()==Comm && UM==true && OrderMagicNumber()==Magic && OrderType()==OP_SELL && OrderOpenPrice()-TS*pip>=Ask && (OrderStopLoss()>Ask+TS*pip || OrderStopLoss()==0)) w=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TS*pip,OrderTakeProfit(),0);
if(UC==true && OrderComment()==Comm && UM==false && OrderType()==OP_BUY && OrderOpenPrice()+TS*pip<=Bid && OrderStopLoss()<Bid-TS*pip) w=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TS*pip,OrderTakeProfit(),0);
if(UC==true && OrderComment()==Comm && UM==false && OrderType()==OP_SELL && OrderOpenPrice()-TS*pip>=Ask && (OrderStopLoss()>Ask+TS*pip || OrderStopLoss()==0)) w=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TS*pip,OrderTakeProfit(),0);
if(UC==false && UM==true && OrderMagicNumber()==Magic && OrderType()==OP_BUY && OrderOpenPrice()+TS*pip<=Bid && OrderStopLoss()<Bid-TS*pip) w=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TS*pip,OrderTakeProfit(),0);
if(UC==false && UM==true && OrderMagicNumber()==Magic && OrderType()==OP_SELL && OrderOpenPrice()-TS*pip>=Ask && (OrderStopLoss()>Ask+TS*pip || OrderStopLoss()==0)) w=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TS*pip,OrderTakeProfit(),0);
if(UC==false && UM==false && OrderType()==OP_BUY && OrderOpenPrice()+TS*pip<=Bid && OrderStopLoss()<Bid-TS*pip) w=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TS*pip,OrderTakeProfit(),0);
if(UC==false && UM==false && OrderType()==OP_SELL && OrderOpenPrice()-TS*pip>=Ask && (OrderStopLoss()>Ask+TS*pip || OrderStopLoss()==0)) w=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TS*pip,OrderTakeProfit(),0);
}
}
}
//--- 1.3. End of main function -------------------------------------------
Onde você pode ver o codificador Il Anokhin fist define pip.
Mas aqui está outro exemplo chamado E-smart trailing from Димаhttps://www.mql5.com/en/code/8674
//+------------------------------------------------------------------+
void ModifyStopLossInPoint(int stoploss)
{
bool result;
double sl = 0;
double point = MarketInfo(OrderSymbol(),MODE_POINT);
if (OrderType() == OP_BUY) sl = OrderOpenPrice() + stoploss * point;
if (OrderType() == OP_SELL) sl = OrderOpenPrice() - stoploss * point;
result = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,CLR_NONE);
if (result && UseSound) PlaySound(var_132);
}
//+------------------------------------------------------------------+
Observe as diferenças sutis na hora de fazer as coisas.
Eu sempre tento várias coisas até encontrar algo que funcione melhor.
Muito bem, se você usar...
Omg, apenas verifique rapidamente os incríveis agradecimentos por tudo antes de começar a ler e experimentar algo. Vou tentar isso em breve.
Mais uma vez um grande obrigado @Marco vd Heijden
Os objetos são empilhados uns sobre os outros, por isso é importante que a carta () saiba quais clicam em que botão ou objetos têm a maior prioridade sobre outros objetos que possam se sobrepor.
Muito obrigado Homem, gostei de seus comentários que são mais claros e mais úteis.
Tudo de bom para você.
Certo, então se você usar
Sempre tento várias coisas até encontrar algo que funcione melhor.
Estou apenas tentando entender seu bom comentário e depois escrever alguns bons códigos para minhas funções de Pedidos, Stop Loss e Take Profit - obrigado por isso.
Então, eu já tentei algo como abaixo do código, e preciso ter certeza de que tanto EURUSD quanto FB Stop Loss Value estão certos, por 10 pips? ( se você quiser saber o que estou pensando - só acho que sim abaixo dos logs / resultados ambos são o valor correto para 10 pips. )
por exemplo: valor de stoploss = 10; Posição - COMPRAR
log: EURUSD | preço (perguntar): 1.05633 / Stop Loss: 1.05533
log: FB | preço (perguntar): 119.69/ Stop Loss: 119.59
( Chamo abaixo as funções de função por meio de OnChartevent nulo() )
//---
if ( sparam == _buy_name_btn )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
_Buy_calc_SL_TP();
Print( " | Click Verify / ");
}
//---
return;
{
//---
if ( _StopLoss_ON == true )
{
//_Sl = OrderOpenPrice() - _StopLoss * _Pip;
_Sl = Ask - _StopLoss * _Pip;
Print( " | Buy Calc SL TP Function / StopLoss: ", _Sl );
}
//---
return;
}
Parece que está funcionando.
Vou tentar envolver o comentário do Sr. William ao chefe do código da EA - obrigado mais uma vez William.MQL4 do Cálculo da Great Pip
( por favor não me culpe porque esta indústria de códigos parece muito ampla para mim, e às vezes eu perco a cabeça - de qualquer forma eu espero terminar meus códigos do Painel de Comércio EA em breve )
E eu vou compartilhar o código do meu teste EA depois de terminá-lo, pois esse código é bom / certo ou não ( porque eu não sou programador / programador profissional - eu estou trabalhando nele - )
Keith Watford:
Ok, é justo. Não posso me incomodar em ler alguns de seus posts porque isso me machuca os olhos.
Se outros sentem o mesmo, então você perde, não eu.
O mercado está fechado, e não tenho certeza de mais nada. Mas eu tentei algo como abaixo do código, sinto que perdi algo, mas não consigo encontrá-lo.
( Gostaria de mencionar que meus EA's do Painel de Comércio têm códigos de Open Buy, e posições de Open Sell, mas estou tentando escrevê-lo com minha mão, que tenho certeza de como este EA's funciona )
Obrigado antecipadamente por sua ajuda e conselho.
#define POINT int ///< `CHANGE / _Point`.
#define PIP double ///< `POINT / PipsPerPOINT`.
CHANGE points_to_change(POINT n){ return n * _Point ;}
POINT change_to_points(CHANGE c){ return POINT(c / _Point + 0.5) ;}
CHANGE pips_to_change (PIP n){ return points_to_change(pips_to_points(n));}
PIP change_to_pips (CHANGE c){ return points_to_pips(change_to_points(c));}
POINT pips_to_points (PIP n){ if( (_Digits&1) == 1) n *= 10.0; return POINT(n);}
PIP points_to_pips (POINT n){ PIP p = n; if( (_Digits&1) == 1) p /= 10.0; return p;}
string prfx = "test" ;
string sellbutton = prfx + "sell" ;
string sounduse = "tick.wav" ;
int stoploss = 10 ;
int takeprofit = 10 ;
int magic = 12345 ;
int ticket = 0 ;
int slippage = 3 ;
double lot = 0.01 ;
double sl ;
bool stoploss_on = true ;
bool result ;
bool sound_use = true ;
//---
//---
int OnInit()
{
ObjectCreate ( 0, sellbutton, OBJ_BUTTON , 0, 0, 0 );
ObjectSetString ( 0, sellbutton, OBJPROP_TEXT , "Sell" );
ObjectSetInteger ( 0, sellbutton, OBJPROP_XDISTANCE , 20 );
ObjectSetInteger ( 0, sellbutton, OBJPROP_YDISTANCE , 20 );
ObjectSetInteger ( 0, sellbutton, OBJPROP_XSIZE , 80 );
ObjectSetInteger ( 0, sellbutton, OBJPROP_YSIZE , 40 );
ObjectSetInteger ( 0, sellbutton, OBJPROP_CORNER , CORNER_LEFT_UPPER );
ObjectSetInteger ( 0, sellbutton, OBJPROP_COLOR , clrWhite );
ObjectSetInteger ( 0, sellbutton, OBJPROP_BGCOLOR , clrMaroon );
ObjectSetInteger ( 0, sellbutton, OBJPROP_STATE , false );
ObjectSetInteger ( 0, sellbutton, OBJPROP_ZORDER , 1 );
Print( "ObjectsTotal: ", ObjectsTotal() );
return(0);
}
//---
//---
void OnTick()
{
//---
//---
return;
}
//---
//---
void OnDeinit(const int reason)
{
//---
ObjectsDeleteAll( 0, prfx );
//---
return;
}
//---
//---
void OnChartEvent(const int id ,
const long& lparam ,
const double& dparam ,
const string& sparam
)
{
// Sell
if ( sparam == sellbutton )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
ticket = Orderfuntions( sellbutton );
}
return;
}
//---
//---
void SellCalcSLTP()
{
//---
if ( stoploss_on == true )
{
if ( OrderType() == OP_SELL ) sl = OrderOpenPrice() - pips_to_change( stoploss );
if ( OrderType() == OP_BUY ) sl = OrderOpenPrice() + pips_to_change( stoploss );
result = OrderModify( OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, CLR_NONE );
if ( result && sound_use ) PlaySound( sounduse );
}
//---
return;
}
//---
//---
int Orderfuntions( string _Order_selector )
{
// Sell Order
SellCalcSLTP();
if ( _Order_selector == sellbutton )
{
ticket = OrderSend( _Symbol, OP_SELL, lot, Bid, slippage, sl, takeprofit, "comment", magic, 0, clrMaroon );
}
return(ticket);
}
Parece bem, mas você não pode usar ordermodificar assim, primeiro você tem que selecionar um pedido com a função OrderSelect().