[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 594
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Ho preso la teoria delle probabilità e statisticamente se l'ordine di apertura sarà entro 50 pip dal prezzo, allora all'ordine di apertura con 10 pip di profitto è più facile da raggiungere - se ci sarà anche 10 pip di stop loss (anche lo spread non è un problema) il movimento di tendenza è una grande cosa ...
Aggiungere uno stop loss, indipendentemente dallo StepStop
//+------------------------------------------------------------------+
//| Volfram.mq4 |
//| Vova-x@list.ru |
//| |
//+------------------------------------------------------------------+
#property copyright "Vova-x@list.ru"
#proprietà link ""
//-----------------------------------------
extern TakeProfit=10;
extern int StepStop=45;
extern double Lots=0.01;
extern bool MoneyManagement=true;
extern inttern MarginPercent=10;
//-------------------------------------------
int level_sell_stop;
int level_buy_stop;
//----------------------------------------------------------
void init()
{
// int minstop=MarketInfo(Symbol(),MODE_STOPLEVEL);
//Stampa("levelbuy_stop: "+minstop;)
}
//-----------------------------------------------------------
void start()
{
if (!IsTradeAllowed()) return;
level_buy_stop=0;
level_sell_stop=0;
StepingStop();
StepingPendings();
se (TotalBuy ()==0 && TotalBuyStop ()==0) SetBuyStop ();
se (TotalSell()==0 && TotalSellStop()==0) SetSellStop();
Comment("Level Buy Stop=",level_buy_stop*Point,
"\n", "Level Sell Stop=",level_sell_stop*Point);
}
//---------------------------------------------------------------------------------------------
void StepingStop()
{
se (StepStop<1) ritorno;
int ask, bid, open, stop, x;
doppia perdita;
per (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
se (OrderSymbol()!=Symbol())
se (OrderType()==OP_BUY)
{
bid=MathRound(Bid/Point);
open=MathRound(OrderOpenPrice()/Point);
stop=MathRound(OrderStopLoss()/Point);
x=(bid-open)/StepStop; x--; x*=StepStop;
level_sell_stop=open+x;
se (stop>=open+x)
perdita=(open+x)*Punto;
OrderModify(OrderTicket(),OrderOpenPrice(),loss,OrderTakeProfit(),0,CLR_NONE);
}
se (OrderType()==OP_SELL)
{
ask=MathRound(Ask/Point);
open=MathRound(OrderOpenPrice()/Point);
stop=MathRound(OrderStopLoss()/Point);
x=(open-ask)/StepStop; x--; x*=StepStop;
level_buy_stop=open-x;
se (stop>0 && stop<=open-x)
perdita=(open-x)*Punto;
OrderModify(OrderTicket(),OrderOpenPrice(),loss,OrderTakeProfit(),0,CLR_NONE);
}
}
}
//----------------------------------------------------------------------------
void PassaggioPendings()
{
int ask, bid, open;
doppio prezzo, perdita, profitto;
per (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
se (OrderSymbol()!=Symbol())
se (OrderType()==OP_BUYSTOP)
{
se (level_buy_stop==0)
open=MathRound(OrderOpenPrice()/Point);
se (open<=livello_buy_stop)
price=level_buy_stop*Point;
perdita=prezzo-StepStop*Punto;
profitto=0; se (TakeProfit>0) profitto=prezzo+TakeProfit*Point;
OrderModify(OrderTicket(),price,loss,profit,0,CLR_NONE);
}
se (OrderType()==OP_SELLSTOP)
{
se (level_sell_stop==0)
open=MathRound(OrderOpenPrice()/Point);
se (open>=level_sell_stop)
price=level_sell_stop*Point;
perdita=prezzo+StepStop*Punto;
profitto=0; se (TakeProfit>0) profitto=prezzo-TakeProfit*Point;
OrderModify(OrderTicket(),price,loss,profit,0,CLR_NONE);
}
}
}
//-------------------------------------------------------------------
void SetBuyStop()
{
double lots=LotsCounting();
double price=Bid+StepStop*Point;
doppia perdita=prezzo-StepStop*Punto;
double profit=0; if (TakeProfit>0) profit=price+TakeProfit*Point;
int ticket=OrderSend(Symbol(),OP_BUYSTOP,lots,price,0,loss,profit,"",0,0,CLR_NONE);
if (ticket<1) Print("Set a pending order failed with error #",GetLastError()," ",(GetLastError());
}
void SetSellStop()
{
double lots=LotsCounting();
double price=Ask-StepStop*Point;
doppia perdita=prezzo+StepStop*Punto;
double profit=0; if (TakeProfit>0) profit=price-TakeProfit*Point;
int ticket=OrderSend(Symbol(),OP_SELLSTOP,lots,price,0,loss,profit,"",0,0,0,CLR_NONE);
if (ticket<1) Print("Set a pending order failed with error #",GetLastError()," ",(GetLastError());
}
int TotalBuy()
{
int count=0;
per (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
se (OrderSymbol()!=Symbol()) continua;
se (OrderType()==OP_BUY) count++;
}
ritorno (count);
}
int TotalBuyStop()
{
int count=0;
per (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
se (OrderSymbol()!=Symbol()) continua;
if (OrderType()==OP_BUYSTOP) count++;
}
ritorno (count);
}
int TotalSell()
{
int count=0;
per (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
se (OrderSymbol()!=Symbol()) continua;
se (OrderType()==OP_SELL) count++;
}
ritorno (count);
}
int TotalSellStop()
{
int count=0;
per (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
se (OrderSymbol()!=Symbol()) continua;
se (OrderType()==OP_SELLSTOP) count++;
}
ritorno (count);
}
doppio Conteggio dei lotti()
{
doppi lotti=Lotti;
se (MoneyManagement)
{
double lotsize=MarketInfo(Symbol(),MODE_LOTSIZE);
double freemargin=AccountFreeMargin();
lots=0; if (lotsize>0) lots=NormalizeDouble((MarginPercent*freemargin/lotsize),1);
}
if (lots>10) lots=NormalizeDouble(lots,0);
se (lotti<0,01) lotti=0,01;
ritorno (lotti);
}
// Fine
La ragione per cui non hanno risposto è probabilmente perché scrivere un tale indicatore è semplice e molto probabilmente inutile.
Gente, aiuto! Non riesco a calcolare il volume massimo di un trade da aprire
Max_lots è sempre zero!
E la seconda domanda, come viene calcolato il LIVELLO?
Grazie, ma ancora? O ditemi, forse nelle impostazioni del terminale, c'è un'opzione per mostrare gli indicatori delle ore più chiaramente per tutta la lunghezza della scala temporale?
in termini semplici, il volume può essere calcolato come segue
e livello = AccountEquity() / AccountFreeMargin() * 100;
e livello = AccountEquity() / AccountFreeMargin() * 100;
Non è corretto. Questa formula non risolve il livello
Sì, sbagliato, livello = AccountEquity() / AccountMargin() * 100;
Sì, sbagliato, livello = AccountEquity() / AccountMargin() * 100;
Scusa per il flub, ma oggi è il giorno giusto.
=====
E oscillare ad un'altezza senza senso...
Un paio di frasi che sono arrivate da qui...
===========
Andrei Voznesensky.