![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
Come partecipante a questa azione, accetto di rendere pubblico il caso, non ho nulla da nascondere.
Quindi mettetelo fuori.
Ciao, vorrei un EA o un indicatore e uno script per creare un grafico Renko in MT5.
Cioè è possibile appendere indicatori e script sul grafico.
In MT4 è implementato da diversi consulenti, io personalmente uso RenkoLiveChart_v3.2, mi piacerebbe avere qualcosa di simile per MT5.
Bene, allegato il codice di RenkoLiveChart_v3.2,
Ecco la risposta dell'artista:
"Posso iniziare.
Ma lo farò entro questa settimana.
Questo è tutto, un ulteriore rifiuto e fine.
quindi mettetelo su.
Ecco ciò che l'appaltatore ha scritto sul TOR (copiato testualmente):
"Si prega di allegare il codice sorgente dell'esperto come ToR. (significa RenkoLiveChart_v3.2)
importo 100 tempo 5".
Tutta la corrispondenza con l'interprete era solo nel servizio, in modo che i moderatori la vedessero quando decidevano la multa.
Cosa pubblicare? Codice EA per MT4? Ecco il testo dell'annuncio:
Ciao, vorrei un Expert Advisor o un indicatore e uno script per creare Renco-Chart in MT5.
Cioè è possibile appendere indicatori e script sul grafico.
In MT4 è implementato da diversi consulenti, io personalmente uso RenkoLiveChart_v3.2, mi piacerebbe avere qualcosa di simile per MT5.
Bene, allegato il codice di RenkoLiveChart_v3.2,
Ecco la risposta dell'artista:
"Posso iniziare.
Ma lo farò entro questa settimana.
Questo è tutto, un ulteriore rifiuto e fine.
Ed ecco la prossima frase scritta che in generale - è reale per fare il lavoro, ma ad un prezzo di 4 volte superiore.
Naturalmente, nelle discussioni di cui sopra ci sono frasi che forse le TOR sono cambiate, o qualche altra forza maggiore.
Ecco una frase letterale dell'esecutore (copiata) per cui il lavoro non è stato fatto: "si scopre che non sarà realistico a causa dell'architettura di MT5".
E la frase successiva è scritto che in generale - è possibile fare il lavoro, ma ad un costo di 4 volte superiore.
E cosa c'entro io come cliente? L'arbitro Rosh non me l'ha ancora spiegato.
Bene, e per completare il quadro, portate qui un interprete.
Ad essere onesti, se fossi stato in lui, sarei venuto io stesso molto tempo fa, vi avrei dato 5 dollari e avrei dormito tranquillamente.
Ma ora che abbiamo iniziato, andiamo avanti. Pubblica il testo completo della corrispondenza (compreso il tuo incarico e la sua lettera) con una cronologia, e chiedi a Rashid o Renat dei commenti.
komposter:
Bene, e per completare il quadro, portate qui un artista.
Ad essere onesti, se fossi stato in lui, sarei venuto io stesso molto tempo fa, vi avrei dato 5 dollari e avrei dormito tranquillamente.
Ma ora che abbiamo iniziato, andiamo avanti. Pubblica il testo completo della corrispondenza (compreso il tuo incarico e la sua lettera) con la cronologia, e chiedi a Rashid o Renat dei commenti.
Come ho scritto prima, non è nell'importo (5feb.) E nemmeno nell'artista (beh, non calcolato la loro forza, succede), e nel principio di raccolta delle multe da parte dei moderatori della risorsa. La pena non è imposta al colpevole, ma a chi è più conveniente.
Non posso invitare l'esecutore testamentario, se non viene, così lui pensa che sia meglio, è un suo diritto.
Ecco il testo del TOR:
TERMINI DI RIFERIMENTO
Il compito è quello di creare un advisor che crei Renko-Chart nel terminale di trading Metatrader 5, simile nella funzionalità a RenkoLiveChart_v3.2.mq4, usato nel terminale di trading Metatrader 4.
Codice sorgente RenkoLiveChart_v3.2.mq4:
//+---------------------------------------------------------------------------+
//| EA VERSIONE
//| RenkoLiveChart_v3.2.mq4
//| Ispirato dallo script Renko di "e4" (renko_live_scr.mq4)
//| Copyleft 2009 LastViking
//|
//| 12 agosto 2009 (LV):
//| - Volevo il volume nel mio grafico Renko così ho scritto il mio script
//|
//| 20-21 agosto 2009 (LV) (v1.1 - v1.3):
//| - Primo tentativo di formazione di mattoni Renko dal vivo (bugs O bugs...)
//| - Risolto il problema con strani nomi di simboli in alcune 5 cifre
//| broker (credito a Tigertron)
//|
//| 24 agosto 2009 (LV) (v1.4):
//| - Gestire l'alto/basso nella storia in modo ragionevole (prev.
//| usato Close)
//|
//| 26 agosto 2009 (Lou G) (v1.5/v1.6):
//| - Finire di sistemare la "comparsa tardiva" (mattone Renko in diretta)
//| formazione) bug
//|
//| 31 agosto 2009 (LV) (v2.0):
//| - Non è più uno script, ma viene eseguito come indicatore
//| - Eliminato il bug di MT4 che causava il "bug della comparsa tardiva".
//| un po' più vicino (ha a che fare con le lacune High / Low)
//| - Rimosso il while ... sleep() loop. Il grafico Renko è ora tick
//| guidato: -MUSH è più gentile con le risorse di sistema in questo modo
//|
//| 03 settembre 2009 (LV) (v2.1):
//| - Fissato in modo che Time[] tenga il tempo aperto del renko
//| mattoni (tempo di chiusura usato in precedenza)
//|
//| 16 settembre 2009 (Lou G) (v3.0):
//| - Stoppini opzionali aggiunti
//| - Conversione in EA
//| - Aggiustamento automatico per i broker 5 e 6 dec aggiunto
//| - inserire RenkoBoxSize come dimensione "effettiva", per esempio "10" per 10 pip
//| - Aggiunta la compensazione per il problema del "confronto con lo zero".
//|
//| Okt 05 2009 (LV) (v3.1):
//| - Risolto un bug relativo a BoxOffset
//| - Regolazione automatica per coppie JPY a 3 e 4 dec
//| - Rimossa la funzione init()
//| - Cambiato di nuovo al vecchio stile di formazione a mattoni Renko
//|
//| Okt 13 2009 (LV) (v3.2):
//| - Aggiunta l'opzione "EmulateOnLineChart" (credito a Skipperxit/Mimmo)
//|
//+---------------------------------------------------------------------------+
#proprietà copyright ""
//+------------------------------------------------------------------+
#include <WinUser32.mqh>
#include <stdlib.mqh>
//+------------------------------------------------------------------+
#importare "user32.dll"
int RegisterWindowMessageA(stringa lpString);
#importare
//+------------------------------------------------------------------+
extern int RenkoBoxSize = 10;
extern intern RenkoBoxOffset = 0;
extern inttern RenkoTimeFrame = 2; // Quale time frame usare per il grafico renko offline
extern bool ShowWicks = true;
extern bool EmulateOnLineChart = true;
extern bool StrangeSymbolName = false;
//+------------------------------------------------------------------+
int HstHandle = -1, LastFPos = 0, MT4InternalMsg = 0;
stringa SymbolName;
//+------------------------------------------------------------------+
void UpdateChartWindow() {
static int hwnd = 0;
se(hwnd == 0) {
hwnd = WindowHandle(SymbolName, RenkoTimeFrame);
if(hwnd != 0) Print("Chart window detected");
}
if(EmulateOnLineChart && MT4InternalMsg == 0)
MT4InternalMsg = RegisterWindowMessageA("MetaTrader4_Internal_Message");
if(hwnd != 0) if(PostMessageA(hwnd, WM_COMMAND, 0x822c, 0) == 0) hwnd = 0;
if(hwnd != 0 && MT4InternalMsg != 0) PostMessageA(hwnd, MT4InternalMsg, 2, 1);
ritorno;
}
//+------------------------------------------------------------------+
int start() {
doppio statico BoxPoints, UpWick, DnWick;
static double PrevLow, PrevHigh, PrevOpen, PrevClose, CurVolume, CurLow, CurHigh, CurOpen, CurClose;
datetime statico PrevTime;
//+------------------------------------------------------------------+
// Questo viene eseguito solo una volta, poi arriva il primo tick.
se(HstHandle < 0) {
// Init
// Controllo degli errori
se(!IsConnected()) {
Print("In attesa di connessione...");
ritorno(0);
}
se(!IsDllsAllowed()) {
Print("Error: Dll calls must be allowed!");
ritorno(-1);
}
se(MathAbs(RenkoBoxOffset) >= RenkoBoxSize) {
Print("Errore: |RenkoBoxOffset| deve essere inferiore a RenkoBoxSize!");
ritorno(-1);
}
switch(RenkoTimeFrame) {
caso 1: caso 5: caso 15: caso 30: caso 60: caso 240:
caso 1440: caso 10080: caso 43200: caso 0:
Print("Error: Invald time frame used for offline renko chart (RenkoTimeFrame)!");
ritorno(-1);
}
//
int BoxSize = RenkoBoxSize;
int BoxOffset = RenkoBoxOffset;
if(Digits == 5 || (Digits == 3 && StringFind(Symbol(), "JPY") != -1)) {
BoxSize = BoxSize*10;
BoxOffset = BoxOffset*10;
}
if(Digits == 6 || (Digits == 4 && StringFind(Symbol(), "JPY") != -1)) {
BoxSize = BoxSize*100;
BoxOffset = BoxOffset*100;
}
if(StrangeSymbolName) SymbolName = StringSubstr(Symbol(), 0, 6);
else SymbolName = Symbol();
BoxPoints = NormalizeDouble(BoxSize*Point, Digits);
PrevLow = NormalizeDouble(BoxOffset*Point + MathFloor(Close[Bars-1]/BoxPoints)*BoxPoints, Digits);
DnWick = PrevLow;
PrevHigh = PrevLow + BoxPoints;
PrevWick = PrevHigh;
PrevOpen = PrevLow;
PrevClose = PrevHigh;
CurVolume = 1;
PrevTime = Time[Bars-1];
// creare / aprire il file hst
HstHandle = FileOpenHistory(SymbolName + RenkoTimeFrame + ".hst", FILE_BIN|FILE_WRITE);
se(HstHandle < 0) {
Print("Errore: impossibile creare / aprire il file della cronologia: " + ErrorDescription(GetLastError()) + ": " + SymbolName + RenkoTimeFrame + ".hst");
ritorno(-1);
}
//
// scrivere l'intestazione del file hst
int HstUnused[13];
FileWriteInteger(HstHandle, 400, LONG_VALUE); // Versione
FileWriteString(HstHandle, "", 64); // FileWriteString(HstHandle, "", 64); // Versione
FileWriteString(HstHandle, SymbolName, 12); // Simbolo
FileWriteInteger(HstHandle, RenkoTimeFrame, LONG_VALUE); // Periodo
FileWriteInteger(HstHandle, Digits, LONG_VALUE); // Digits
FileWriteInteger(HstHandle, 0, LONG_VALUE); // Time Sign
FileWriteInteger(HstHandle, 0, LONG_VALUE); // Ultima sincronizzazione
FileWriteArray(HstHandle, HstUnused, 0, 13); // Unused
//
// elabora i dati storici
int i = Bars-2;
//Print(Symbol() + " + High[i] + " + Low[i] + " + Open[i] + " + Close[i]);
//---------------------------------------------------------------------------
mentre(i >= 0) {
CurVolume = CurVolume + Volume[i];
UpWick = MathMax(UpWick, High[i]);
DnWick = MathMin(DnWick, Low[i]);
// aggiorna il basso prima dell'alto o l'inversione a seconda che sia più vicino alla barra precedente
bool UpTrend = High[i]+Low[i] > High[i+1]+Low[i+1];
while(UpTrend && (Low[i] < PrevLow-BoxPoints || CompareDoubles(Low[i], PrevLow-BoxPoints)) {
PrevHigh = PrevHigh - BoxPoints;
PrevLow = PrevLow - BoxPoints;
PrevOpen = PrevHigh;
PrevClose = PrevLow;
FileWriteInteger(HstHandle, PrevTime, LONG_VALUE);
FileWriteDouble(HstHandle, PrevOpen, DOUBLE_VALUE);
FileWriteDouble(HstHandle, PrevLow, DOUBLE_VALUE);
if(ShowWicks && UpWick > PrevHigh) FileWriteDouble(HstHandle, UpWick, DOUBLE_VALUE);
else FileWriteDouble(HstHandle, PrevHigh, DOUBLE_VALUE);
FileWriteDouble(HstHandle, PrevClose, DOUBLE_VALUE);
FileWriteDouble(HstHandle, CurVolume, DOUBLE_VALUE);
UpWick = 0;
DnWick = EMPTY_VALUE;
CurVolume = 0;
CurHigh = PrevLow;
CurLow = PrevLow;
if(PrevTime < Time[i]) PrevTime = Time[i];
else PrevTime++;
}
while(High[i] > PrevHigh+BoxPoints || CompareDoubles(High[i], PrevHigh+BoxPoints)) {
PrevHigh = PrevHigh + BoxPoints;
PrevLow = PrevLow + BoxPoints;
PrevOpen = PrevLow;
PrevClose = PrevHigh;
FileWriteInteger(HstHandle, PrevTime, LONG_VALUE);
FileWriteDouble(HstHandle, PrevOpen, DOUBLE_VALUE);
if(ShowWicks && DnWick < PrevLow) FileWriteDouble(HstHandle, DnWick, DOUBLE_VALUE);
else FileWriteDouble(HstHandle, PrevLow, DOUBLE_VALUE);
FileWriteDouble(HstHandle, PrevHigh, DOUBLE_VALUE);
FileWriteDouble(HstHandle, PrevClose, DOUBLE_VALUE);
FileWriteDouble(HstHandle, CurVolume, DOUBLE_VALUE);
UpWick = 0;
DnWick = EMPTY_VALUE;
CurVolume = 0;
CurHigh = PrevHigh;
CurLow = PrevHigh;
if(PrevTime < Time[i]) PrevTime = Time[i];
else PrevTime++;
}
while(!UpTrend && (Low[i] < PrevLow-BoxPoints || CompareDoubles(Low[i], PrevLow-BoxPoints)) {
PrevHigh = PrevHigh - BoxPoints;
PrevLow = PrevLow - BoxPoints;
PrevOpen = PrevHigh;
PrevClose = PrevLow;
FileWriteInteger(HstHandle, PrevTime, LONG_VALUE);
FileWriteDouble(HstHandle, PrevOpen, DOUBLE_VALUE);
FileWriteDouble(HstHandle, PrevLow, DOUBLE_VALUE);
if(ShowWicks && UpWick > PrevHigh) FileWriteDouble(HstHandle, UpWick, DOUBLE_VALUE);
else FileWriteDouble(HstHandle, PrevHigh, DOUBLE_VALUE);
FileWriteDouble(HstHandle, PrevClose, DOUBLE_VALUE);
FileWriteDouble(HstHandle, CurVolume, DOUBLE_VALUE);
UpWick = 0;
DnWick = EMPTY_VALUE;
CurVolume = 0;
CurHigh = PrevLow;
CurLow = PrevLow;
if(PrevTime < Time[i]) PrevTime = Time[i];
else PrevTime++;
}
i--;
}
LastFPos = FileTell(HstHandle); // Ricorda l'ultima posizione nel file
//
Comment("RenkoLiveChart(" + RenkoBoxSize + "): Aprire Offline ", SymbolName, ",M", RenkoTimeFrame, " per visualizzare il grafico");
se(Close[0] > MathMax(PrevClose, PrevOpen)) CurOpen = MathMax(PrevClose, PrevOpen);
altrimenti se (Close[0] < MathMin(PrevClose, PrevOpen)) CurOpen = MathMin(PrevClose, PrevOpen);
else CurOpen = Close[0];
CurClose = Close[0];
se(UpWick > PrevHigh) CurHigh = UpWick;
if(DnWick < PrevLow) CurLow = DnWick;
FileWriteInteger(HstHandle, PrevTime, LONG_VALUE); // Tempo
FileWriteDouble(HstHandle, CurOpen, DOUBLE_VALUE); // Aprire
FileWriteDouble(HstHandle, CurLow, DOUBLE_VALUE); // Basso
FileWriteDouble(HstHandle, CurHigh, DOUBLE_VALUE); // Alto
FileWriteDouble(HstHandle, CurClose, DOUBLE_VALUE); // Chiudi
FileWriteDouble(HstHandle, CurVolume, DOUBLE_VALUE); // Volume
FileFlush(HstHandle);
UpdateChartWindow();
ritorno(0);
// Fine dei dati storici / Init
}
//----------------------------------------------------------------------------
// HstHandle non < 0 quindi entriamo sempre qui dopo la storia fatta
// Iniziare il flusso di dati dal vivo
UpWick = MathMax(UpWick, Bid);
DnWick = MathMin(DnWick, Bid);
CurVolume++;
FileSeek(HstHandle, LastFPos, SEEK_SET);
//-------------------------------------------------------------------------
// su scatola
if(Bid > PrevHigh+BoxPoints || CompareDoubles(Bid, PrevHigh+BoxPoints)) {
PrevHigh = PrevHigh + BoxPoints;
PrevLow = PrevLow + BoxPoints;
PrevOpen = PrevLow;
PrevClose = PrevHigh;
FileWriteInteger(HstHandle, PrevTime, LONG_VALUE);
FileWriteDouble(HstHandle, PrevOpen, DOUBLE_VALUE);
if (ShowWicks && DnWick < PrevLow) FileWriteDouble(HstHandle, DnWick, DOUBLE_VALUE);
else FileWriteDouble(HstHandle, PrevLow, DOUBLE_VALUE);
FileWriteDouble(HstHandle, PrevHigh, DOUBLE_VALUE);
FileWriteDouble(HstHandle, PrevClose, DOUBLE_VALUE);
FileWriteDouble(HstHandle, CurVolume, DOUBLE_VALUE);
FileFlush(HstHandle);
LastFPos = FileTell(HstHandle); // Ricorda l'ultima posizione nel file
se(PrevTime < TimeCurrent()) PrevTime = TimeCurrent();
else PrevTime++;
CurVolume = 0;
CurHigh = PrevHigh;
CurLow = PrevHigh;
UpWick = 0;
DnWick = EMPTY_VALUE;
UpdateChartWindow();
}
//-------------------------------------------------------------------------
// casella in basso
else if(Bid < PrevLow-BoxPoints || CompareDoubles(Bid,PrevLow-BoxPoints)) {
PrevHigh = PrevHigh - BoxPoints;
PrevLow = PrevLow - BoxPoints;
PrevOpen = PrevHigh;
PrevClose = PrevLow;
FileWriteInteger(HstHandle, PrevTime, LONG_VALUE);
FileWriteDouble(HstHandle, PrevOpen, DOUBLE_VALUE);
FileWriteDouble(HstHandle, PrevLow, DOUBLE_VALUE);
if(ShowWicks && UpWick > PrevHigh) FileWriteDouble(HstHandle, UpWick, DOUBLE_VALUE);
else FileWriteDouble(HstHandle, PrevHigh, DOUBLE_VALUE);
FileWriteDouble(HstHandle, PrevClose, DOUBLE_VALUE);
FileWriteDouble(HstHandle, CurVolume, DOUBLE_VALUE);
FileFlush(HstHandle);
LastFPos = FileTell(HstHandle); // Ricorda l'ultima posizione nel file
se(PrevTime < TimeCurrent()) PrevTime = TimeCurrent();
else PrevTime++;
CurVolume = 0;
CurHigh = PrevLow;
CurLow = PrevLow;
UpWick = 0;
DnWick = EMPTY_VALUE;
UpdateChartWindow();
}
//-------------------------------------------------------------------------
// nessuna casella - alto/basso non colpito
else {
if(Bid > CurHigh) CurHigh = Bid;
if(Bid < CurLow) CurLow = Bid;
if(PrevHigh <= Bid) CurOpen = PrevHigh;
else if(PrevLow >= Bid) CurOpen = PrevLow;
else CurOpen = Bid;
CurClose = Bid;
FileWriteInteger(HstHandle, PrevTime, LONG_VALUE); // Tempo
FileWriteDouble(HstHandle, CurOpen, DOUBLE_VALUE); // Aprire
FileWriteDouble(HstHandle, CurLow, DOUBLE_VALUE); // Basso
FileWriteDouble(HstHandle, CurHigh, DOUBLE_VALUE); // Alto
FileWriteDouble(HstHandle, CurClose, DOUBLE_VALUE); // Chiudi
FileWriteDouble(HstHandle, CurVolume, DOUBLE_VALUE); // Volume
FileFlush(HstHandle);
UpdateChartWindow();
}
ritorno(0);
}
//+------------------------------------------------------------------+
int deinit() {
se(HstHandle >= 0) {
FileClose(HstHandle);
HstHandle = -1;
}
Commento(");
ritorno(0);
}
//+------------------------------------------------------------------+
Ecco la risposta dell'ESECUTIVO:
15794
Im_hungry 2013.11.25 17:25 #
Posso iniziare.
Ma lo farà entro questa settimana.
Prossimo
Im_hungry 2013.11.26 07:59 #
Lo riscriverò. Vi manderò la fonte e altre cose.
Ve lo manderò.
Il prossimo:
Im_hungry 2013.11.26 08:33 #
Domani potrò iniziare a lavorarci.
Sarà in grado di iniziare solo domani. Lo farà entro la fine della settimana
2013.11.26 10:25
Lo sviluppatore Im_hungry ha confermato il passo "accordo per lavorare"
Bene, e per completare il quadro, portate qui un artista.
Ad essere onesti, se fossi stato in lui, sarei venuto io stesso molto tempo fa, vi avrei dato 5 dollari e avrei dormito tranquillamente.
Ma ora che abbiamo iniziato, andiamo avanti. Pubblica il testo completo della corrispondenza (compreso il tuo compito e la sua lettera) con una cronologia, e chiedi a Rashid o Renat dei commenti.
Ecco la risposta, sono apparse delle righe, non posso rimuoverle, sto scrivendo il prossimo post.
Prossimo
Il prossimo è il tuo turno.
Come ToR, allegare il codice sorgente dell'esperto.
quantità 100 tempo 5.
Per procedere alla fase successiva e iniziare il lavoro devi avere l'importo specificato nel tuo account (Profilo - Pagamenti - ricarica)
Tutte le regole qui: https: //www.mql5.com/ru/job/rules
Ok.
I fondi saranno congelati fino alla conferma del passo "Pagamento".
Dopo la verifica e la ricezione del codice sorgente. Semmai c'è un arbitrato
a cui potrà presentare una richiesta di rimborso.
2013.11.27 12:20 Il cliente kylinar2012 ha confermato il passo "Accordo di TOR". Il costo finale del lavoro è fissato a 100,00 crediti.
Termini di riferimento allegati al cliente
Lo sviluppatore Im_hungry ha confermato il passo "Agree ToR". 100.00 crediti congelati per conto del cliente(kylinar2012)
2013.12.01 09:38
"Si prega di chiudere la richiesta a favore del cliente.TOR non può essere implementato a causa dell'architettura MT5.Grazie"
2013.12.02 11:28
Come risultato dell'arbitrato, il lavoro è stato cancellato dall'amministratore Rosh. I fondi congelati di 95,00 crediti sono stati restituiti al cliente. L'interprete è stato spostato su "Rifiutato".
Questo è tutto, poi una mail a me:
Con tutto il rispetto, Alex.
Qual è la mia colpa? Qual è la pena? Chiedo commenti a Rashid o Renat.
Vorrei anche aggiungere che un tale EA è implementato qui:
https://www.mql5.com/ru/market/product/714#full_description
Solo che per me è un po' spento perché usa indicatori specifici (purtroppo).
Se avessi potuto mettere il mio, non mi sarei preoccupato di questo sviluppo, ma l'avrei comprato lì.
Di cosa sono colpevole? Per cosa sono multato? Chiedo commenti a Rashid o Renat.
Nessuna corrispondenza con altri candidati?
Sono dalla vostra parte. Il commento di Rashid sarà molto interessante.