Konstantin Bystrov: Ciao a tutti. è possibile scrivere un indicatore in mt4, per visualizzare le sessioni di trading attive (è possibile impostare il tempo da 10-18) in forma di candele giapponesi
C'è qualche artigiano qui che potrebbe scrivere un EA basato su un indicatore informativo della forza della valuta. L'algoritmo è il seguente. Stiamo aspettando che appaia la moneta forte e quella debole. Nell'esempio dello screenshot, sono EUR e USD. Se la differenza è significativa (da impostare nei parametri dell'EA), allora apriamo una posizione. Nell'esempio dello screenshot, è necessario entrare in una vendita, cosa che farò lunedì. Nell'EA, dobbiamo impostare il parametro timeframe, dal quale l'EA dovrebbe prendere il segnale (differenza di forza delle diverse valute). La differenza di forza della valuta è il segnale. Lo stop loss non è necessario. Il Take Profit è necessario. Se il prezzo ci va contro, facciamo una media. Nel tuo Expert Advisor, prescrivi il passo di mediazione, il numero di ordini, il numero magico, la dimensione iniziale del lotto e il fattore di incremento del lotto. Ho fatto trading con questo metodo recentemente; sono molto soddisfatto. Per la mia percezione è un graal.
Konstantin Bystrov: Ciao a tutti. è possibile scrivere un indicatore in mt4, per visualizzare le sessioni di trading attive (è possibile impostare il tempo da 10-18) in forma di candele giapponesi
//+------------------------------------------------------------------+//+------------------------------------------------------------------+#property copyright""#property link""#property indicator_chart_windowexternint NumberOfDays = 50;
externstring AsiaBegin = "10:00";
externstring AsiaEnd = "18:00";
externcolor AsiaColor = Goldenrod;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+void init()
{
DeleteObjects();
for(int i=0; i<NumberOfDays; i++)
CreateObjects("AS"+i, AsiaColor);
Comment("");
}
//+------------------------------------------------------------------+//| Custor indicator deinitialization function |//+------------------------------------------------------------------+void deinit()
{
DeleteObjects();
Comment("");
}
//+------------------------------------------------------------------+bool CreateObjects(
conststring name="Rectangle", // имя прямоугольникаconstcolor clr=clrRed, // цвет прямоугольникаconstlong chart_ID=0, // ID графикаconstint sub_window=0, // номер подокнаdatetime time1=0, // время первой точкиdouble price1=0, // цена первой точкиdatetime time2=0, // время второй точкиdouble price2=0, // цена второй точкиconstENUM_LINE_STYLE style=STYLE_SOLID, // стиль линий прямоугольникаconstint width=2, // толщина линий прямоугольникаconstbool fill=false, // заливка прямоугольника цветомconstbool back=false, // на заднем планеconstbool selection=false, // выделить для перемещенийconstbool hidden=true, // скрыт в списке объектовconstlong z_order=0) // приоритет на нажатие мышью
{
//--- сбросим значение ошибкиResetLastError();
//--- создадим прямоугольник по заданным координатамif(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": не удалось создать прямоугольник! Код ошибки = ",GetLastError());
return(false);
}
//--- установим цвет прямоугольникаObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль линий прямоугольникаObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину линий прямоугольникаObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- включим (true) или отключим (false) режим заливки прямоугольникаObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- отобразим на переднем (false) или заднем (true) планеObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим выделения прямоугольника для перемещений//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection//--- по умолчанию равен true, что позволяет выделять и перемещать этот объектObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектовObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графикеObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнениеreturn(true);
}
//+------------------------------------------------------------------+void DeleteObjects()
{
for(int i=0; i<NumberOfDays; i++)
ObjectDelete("AS"+i);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+void start()
{
datetime dt=CurTime();
for(int i=0; i<NumberOfDays; i++)
{
DrawObjects(dt, "AS"+i, AsiaBegin, AsiaEnd);
dt=decDateTradeDay(dt);
while(TimeDayOfWeek(dt)>5)
dt=decDateTradeDay(dt);
}
}
//+------------------------------------------------------------------+void DrawObjects(datetime dt, string no, string tb, string te)
{
datetime t1, t2;
double p1, p2;
int b1, b2;
t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
if(!TimeDayOfWeek(t1))
return;
b1=iBarShift(NULL, 0, t1);
b2=iBarShift(NULL, 0, t2);
p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2, b2)];
p2=Low [Lowest(NULL, 0, MODE_LOW, b1-b2, b2)];
ObjectSet(no, OBJPROP_TIME1, t1);
ObjectSet(no, OBJPROP_PRICE1, p1);
ObjectSet(no, OBJPROP_TIME2, t2);
ObjectSet(no, OBJPROP_PRICE2, p2);
}
//+------------------------------------------------------------------+datetime decDateTradeDay(datetime dt)
{
int ty=TimeYear(dt);
int tm=TimeMonth(dt);
int td=TimeDay(dt);
int th=TimeHour(dt);
int ti=TimeMinute(dt);
td--;
if(td==0)
{
tm--;
if(tm==0)
{
ty--;
tm=12;
}
if(tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12)
td=31;
if(tm==2)
if(MathMod(ty, 4)==0)
td=29;
else
td=28;
if(tm==4 || tm==6 || tm==9 || tm==11)
td=30;
}
return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
//+------------------------------------------------------------------+
Ciao Cari guru della programmazione, sto chiedendo il vostro aiuto per finire questo robot.
Io stesso non sono un programmatore, questo robot è assemblato da me stesso da varie parti trovate su Internet, ma non posso allegare le restanti due funzioni che vorrei vedere. Per favore, aiutatemi. Penso che per voi non sarà difficile come per me. Se vuoi aiutare, per favore fai una funzione che chiude l'ordine in sospeso dopo che uno dei due ordini in sospeso è scattato. E la seconda funzione dovrebbe aumentare automaticamente un lotto dell'ordine ("supponiamo" che per ogni 50 dollari di equilibrio 0,01 lotto, quando si raggiunge 100 dollari il robot aumenterà automaticamente un lotto di 0,02). Grazie in anticipo per il vostro aiuto.
externint TakeProfit = 100.0;
externbool AllPositions = True; // Управлять всеми позициямиexternbool ProfitTrailing = True; // Тралить только профитexternint TrailingStop = 50; // Фиксированный размер тралаexternint TrailingStep = 0; // Шаг тралаexternbool UseSound = False; // Использовать звуковой сигналexternstring NameFileSound = "expert.wav"; // Наименование звукового файлаvoid start()
{
double TakeProfitLevelB;
double TakeProfitLevelS;
double BuyStart = Ask + 400*_Point;
double SellStart = Bid - 400*_Point;
TakeProfitLevelB = BuyStart + TakeProfit*Point;
TakeProfitLevelS = SellStart - TakeProfit*Point;
if (Open[1]==Close[1]&& OrdersTotal()==0)
{
int BuyTicket = OrderSend(Symbol(),OP_BUYSTOP,0.10,BuyStart,3,0,TakeProfitLevelB,NULL,0,0,Green);
int SellTicket = OrderSend(Symbol(),OP_SELLSTOP,0.10,SellStart,3,0,TakeProfitLevelS,NULL,0,0,Blue);
}
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (AllPositions || OrderSymbol()==Symbol()) {
TrailingPositions();
}
}
}
}
void TrailingPositions()
{
double pBid, pAsk, pp;
pp = MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_BUY) {
pBid = MarketInfo(OrderSymbol(), MODE_BID);
if (!ProfitTrailing || (pBid-OrderOpenPrice())>TrailingStop*pp) {
if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep-1)*pp) {
ModifyStopLoss(pBid-TrailingStop*pp);
return;
}
}
}
if (OrderType()==OP_SELL) {
pAsk = MarketInfo(OrderSymbol(), MODE_ASK);
if (!ProfitTrailing || OrderOpenPrice()-pAsk>TrailingStop*pp) {
if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) {
ModifyStopLoss(pAsk+TrailingStop*pp);
return;
}
}
}
}
void ModifyStopLoss(double ldStopLoss)
{
bool fm;
fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
Grazie caro gss per il tuo interesse nella mia richiesta. Questo è il motivo per cui ho deciso di rivolgermi al guru di MQL4. Il codice che ho postato funziona. L'ho costruito con l'aiuto di vari Expert Advisors, o per essere più preciso, ho usato solo la funzione Trailing Stop. Il resto l'ho inventato io stesso (riguardo agli ordini pendenti). Vorrei chiedere a te e ad altri guru di dare un'occhiata al mio codice e aggiungere altre due funzioni a questo robot, se non ti dispiace.
1) Per cancellare un ordine in sospeso quando uno di essi si innesca.
2) Aumento automatico del lotto (per ogni 50$ 0,01 cioè per 100$ sarà 0,02)
Piazzando entrambi gli ordini di acquisto e di vendita, non appena uno di essi si chiude, si aprono gli stessi ordini con lo stesso lotto di acquisto e di vendita, ecc.
Ciao a tutti. è possibile scrivere un indicatore in mt4, per visualizzare le sessioni di trading attive (è possibile impostare il tempo da 10-18) in forma di candele giapponesi
ok
Buon pomeriggio!
C'è qualche artigiano qui che potrebbe scrivere un EA basato su un indicatore informativo della forza della valuta. L'algoritmo è il seguente. Stiamo aspettando che appaia la moneta forte e quella debole. Nell'esempio dello screenshot, sono EUR e USD. Se la differenza è significativa (da impostare nei parametri dell'EA), allora apriamo una posizione. Nell'esempio dello screenshot, è necessario entrare in una vendita, cosa che farò lunedì. Nell'EA, dobbiamo impostare il parametro timeframe, dal quale l'EA dovrebbe prendere il segnale (differenza di forza delle diverse valute). La differenza di forza della valuta è il segnale. Lo stop loss non è necessario. Il Take Profit è necessario. Se il prezzo ci va contro, facciamo una media. Nel tuo Expert Advisor, prescrivi il passo di mediazione, il numero di ordini, il numero magico, la dimensione iniziale del lotto e il fattore di incremento del lotto. Ho fatto trading con questo metodo recentemente; sono molto soddisfatto. Per la mia percezione è un graal.
Ciao a tutti. è possibile scrivere un indicatore in mt4, per visualizzare le sessioni di trading attive (è possibile impostare il tempo da 10-18) in forma di candele giapponesi
Ciao Cari guru della programmazione, sto chiedendo il vostro aiuto per finire questo robot.
Io stesso non sono un programmatore, questo robot è assemblato da me stesso da varie parti trovate su Internet, ma non posso allegare le restanti due funzioni che vorrei vedere. Per favore, aiutatemi. Penso che per voi non sarà difficile come per me. Se vuoi aiutare, per favore fai una funzione che chiude l'ordine in sospeso dopo che uno dei due ordini in sospeso è scattato. E la seconda funzione dovrebbe aumentare automaticamente un lotto dell'ordine ("supponiamo" che per ogni 50 dollari di equilibrio 0,01 lotto, quando si raggiunge 100 dollari il robot aumenterà automaticamente un lotto di 0,02). Grazie in anticipo per il vostro aiuto.
Guarda e-News-Lucky$.mq4.
Guarda il metodo di selezione della dimensione della posizione fisso-proporzionale (R. Jones) - MQL4 e MetaTrader 4 - MQL4 Algo-Traders Forum - Pagina 3 (mql5.com)
Guarda e-News-Lucky$.mq4.
Guarda il metodo di selezione della dimensione della posizione fisso-proporzionale (R. Jones) - MQL4 e MetaTrader 4 - MQL4 Algo-Trader Forum - Pagina 3 (mql5.com)
Ciao a tutti, guardate la mia idea per un indicatore, per non spammare tutti i post, ecco il link
https://www.mql5.com/ru/forum/35071/page144#comment_22289427
cioèse l'affare è in profitto cioè l'ordine avanza --- cioè in caso di movimento inverso il blocco sarà positivo.
2.In caso di apertura di una qualsiasi parte del blocco, si dovrebbe piazzare un ordine per la differenza.
sembra essere tutto. Ancora una volta --- l'Expert Advisor non dovrebbe chiudersi da solosenza pulsanti aggiuntivi sul grafico.