je viens d'expérimenter avec l'"archive des cotations" . en mettant à jour chaque graphique séparément, l'historique pour presque tous les graphiques a commencé à fonctionner correctement, sauf pour quelques paires exotiques, je les ai supprimées et mises à jour plusieurs fois - pas de nouvelles données pour le graphique. en général, on peut dire que le problème a été résolu
Chers programmateurs....J'ai un problème... J'aicréé un EA.... il ouvre les trades normalement (dans le testeur) .... mais ne ferme que les trades d'achat.... il ne ferme que les trades de vente après avoir terminé le test.... voici un morceau de code.... pouvez-vous m'aider...
Je pense que c'est une branche de travail... oups, désolé.
Bonne nuit à tous ! !! Bonne année !
J'ai décidé de sauvegarder les données de la mémoire tampon dans un fichier. Il n'y a pas de problème pour créer un fichier et y écrire, mais il est difficile de le lire.
Voici un programme d'essai. Aidez-moi, s'il vous plaît. Le problème est que soit il y a une écriture supplémentaire dans le fichier, soit il ne peut pas être lu du fichier. Je veux juste lire une liste d'un fichier dans, par exemple, des tableaux... Si je suis trop paresseux pour écrire s'il vous plaît lien vers du matériel similaire, mais j'ai trouvé seulement tutoriel ... MAIS MIEUX VAUT UNE VARIANTE PRÊTE SUR LE SITE))) :
MERCI D'AVANCE EN TOUT CAS ! !!))
//+------------------------------------------------------------------+//| Proba file.mq4 |//| Copyright 2014, MetaQuotes Software Corp. |//| https://www.mql4.com |//+------------------------------------------------------------------+#property copyright"Copyright 2014, MetaQuotes Software Corp."#property link"https://www.mql4.com"#property version"1.00"#property strict#property indicator_chart_window#property indicator_buffers3#property indicator_color1 Blue
#property indicator_color2 Lime
#property indicator_color3 Red
externint ind=0; //--- выберем случайно номер строкиexternstring СдвигДаты = "30.12.2014 00:00";
externbool ВыключательСдвигаДаты = false;
externbool ЗаписьФайла = true;
//--- глобальные переменныеint Tm,hr,shift,shiftbar,size,InpFileName;
double H_buff[];
double L_buff[];
double C_buff[];
ulong pos[];
double LastHigh,LastLow;
double OPEN,HIGH,LOW,CLOSE;
datetime pr,pr_1;
string T1,T2,T3,T4,file_buffer;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- привязка массива к индикаторному буферу с номером индексаSetIndexBuffer(0,H_buff);
SetIndexBuffer(1,L_buff);
SetIndexBuffer(2,C_buff);
//--- установка значений индикатора, которые не будут видимы на графике
SetIndexEmptyValue(0,EMPTY);
SetIndexEmptyValue(1,EMPTY);
SetIndexEmptyValue(2,EMPTY);
//---- устанавить новый тип, стиль, ширину и цвет для указанной линии индикатора
SetIndexStyle(0,DRAW_LINE,0,1);
SetIndexStyle(1,DRAW_LINE,0,1);
SetIndexStyle(2,DRAW_LINE,1,1);
//---- устанавить формат точности (количество знаков после десятичной точки
IndicatorDigits(Digits);
//---- Устанавливает порядковый номер бара от начала данных, с которого должна начинаться отрисовка указанной линии
SetIndexDrawBegin(0,2);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---- Функия расчета ключевых точек if (ВыключательСдвигаДаты==true)
shiftbar = iBarShift(Symbol(),PERIOD_D1, StrToTime(СдвигДаты), false);
else
shiftbar = 1;
hr=iBarShift(Symbol(),PERIOD_H1,iTime(Symbol(),PERIOD_D1,shiftbar)); // бервый бар дня для прорисовки уровнейif(hr>=8) shift= hr-4;
HIGH= iHigh(Symbol(),PERIOD_H1,shift);
LOW= iLow(Symbol(),PERIOD_H1,shift);
CLOSE= iClose(Symbol(),PERIOD_H1,shift);
//---- Функция проверки баров утренней сессииint limit=iBarShift(Symbol(),0,iTime(Symbol(),PERIOD_D1,shiftbar)); // бервый бар дня для прорисовки уровнейint end=iBarShift(Symbol(),0,iTime(Symbol(),PERIOD_D1,shiftbar-1));
if(Period()==PERIOD_H1 && hr>=8 && (TimeDayOfWeek(Time[0])<6 && TimeDayOfWeek(Time[0])>0))
{
for(int i=limit; i>=end; i--)
{
if (High[i+1]>LastHigh) LastHigh=High[i+1];
if (Low[i+1]<LastLow) LastLow=Low[i+1];
pr = TimeDay(Time[i]);
pr_1 = TimeDay(Time[i+1]);
if (pr!=pr_1)
{
H_buff[i+1] = EMPTY;
L_buff[i+1] = EMPTY;
C_buff[i+1] = EMPTY;
}
//---- Функция прорисовки уровней ZigZag на графике
H_buff[i]=HIGH;
L_buff[i]=LOW;
C_buff[i]=CLOSE;
}
}
//////////////////////////////////////////////// ЭТО БЫЛО ВСТУПЛЕНИЕ ДЛЯ РАБОЧЕГО ПОНИМАНИЯ \\\\\\\\\\\\\\\\\\ //----- Функция открытия и чтения значений из файла ResetLastError();
//--- откроем файлif(ЗаписьФайла==true)
InpFileName=FileOpen(Symbol()+" Z Point.txt",FILE_READ|FILE_TXT);
if(InpFileName!=INVALID_HANDLE)
{
GetStringPositions(InpFileName,pos); //--- получим позицию начала для каждой строки в файле
size=ArraySize(pos); //--- определим сколько всего строк в файле if(!size) //--- если в файле нет строк, то завершаем работуFileClose(InpFileName);
if(FileSeek(InpFileName,pos[ind],SEEK_SET)==true) //--- сдвинем позицию на начало этой строки
{
Print("Текст строки с номером ",ind," ",FileReadString(InpFileName)," size ",size); //--- прочитаем и распечатаем строку с номером ind
file_buffer=FileReadString(InpFileName); // чтение строки из файла
T1=StringSubstr(file_buffer,0,2+Digits); // Извлекаем первые 7 символов
T2=StringSubstr(file_buffer,7,2+Digits); // Извлекаем вторые 7 символов
T3=StringSubstr(file_buffer,14,2+Digits); // Извлекаем третьи 7 символов
T4=StringSubstr(file_buffer,21); // Извлекаем остаток символов
}
FileClose(InpFileName);
}
if(ЗаписьФайла==true) {
Comment("ЗАПИСЬ В ФАЙЛ: IND ",ind," SIZE ",size," T1: ",StrToDouble(T1)," ||| T2: ",StrToDouble(T2)," ||| T3: ",StrToDouble(T3)," ||| shift ",StrToInteger(T4));
if(StrToDouble(T1)!=HIGH && StrToDouble(T2)!=LOW && StrToDouble(T3)!=CLOSE && StrToInteger(T4)!=shift)
WRITEfile(); } elseComment("ЗАПИСЬ ВЫКЛЮЧЕНА !");
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+//| Функция определяет позиции начала для каждой из строк в файле и |//| помещает их в массив arr |//+------------------------------------------------------------------+void GetStringPositions(constint handle,ulong &arr[])
{
int i,def_size=127; //--- размер массива по умолчаниюArrayResize(arr,def_size); //--- выделим память для массиваif(!FileIsEnding(handle)) //--- если не конец файла, то есть хотя бы одна строка
{
arr[i]=FileTell(handle);
i++; //--- счетчик строк
}
elsereturn; // файл пуст, выходим//--- определим сдвиг в байтах в зависимости от кодировкиif(FileGetInteger(handle,FILE_IS_TEXT))
while(!FileIsEnding(handle)) //--- в цикле перебираем строки до конца файла
{
FileReadString(handle); //--- читаем строкуif(!FileIsEnding(handle)) //--- проверка на конец файла
{
arr[i]=FileTell(handle)+1; //--- запомним позицию следующей строки
i++;
if(i==def_size) //--- увеличим размер массива, если он переполнен
{
def_size+=def_size+1;
ArrayResize(arr,def_size);
}
}
elsebreak; // конец файла, выходим
}
ArrayResize(arr,i); //--- установим истинный размер массива
}
//+------------------------------------------------------------------+void WRITEfile() // запись в файл и его создание если его нет
{
//--- сбросим код ошибкиResetLastError();
//--- правильный способ работы в "файловой песочнице"
InpFileName=FileOpen(Symbol()+" Z Point.txt",FILE_READ|FILE_WRITE|FILE_TXT); // Имя файлаif(InpFileName!=INVALID_HANDLE)
{
FileSeek(InpFileName,0,SEEK_END);
FileWrite(InpFileName,DoubleToStr(HIGH,Digits),DoubleToStr(LOW,Digits),DoubleToStr(CLOSE,Digits),IntegerToString(shift,0));
FileFlush(InpFileName);
}
FileClose(InpFileName);
return;
}
//+------------------------------------------------------------------+
La lecture est réglée grâce aux exemples du tutoriel, mais l'ENREGISTREMENT dans un fichier nécessite un code plus complexe. En bref, je me suis déjà fait avoir... Je n'arrive pas à trouver comment déplacer l'enregistrement en synchronisation avec le fichier Read from.
J'ai corrigé le réglage des niveaux pour les barres de jour et pour l'historique (données initiales tamponnées).
LA QUESTION EST LA MÊME. S'IL VOUS PLAÎT, DONNEZ-MOI UN INDICE, SI C'EST TROP D'ÉCRITURE, SUR LA FAÇON D'ÉCRIRE LES DONNÉES DE LA MÉMOIRE TAMPON DANS UN FICHIER.
CODE MODIFIÉ DU PROGRAMME
//+------------------------------------------------------------------+//| Proba file.mq4 |//| Copyright 2014, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2014, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property strict#property indicator_chart_window#property indicator_buffers3#property indicator_color1 Blue
#property indicator_color2 Lime
#property indicator_color3 Red
externint ind=0; //--- выберем случайно номер строкиexternstring СдвигДаты = "06.01.2015 00:00";
externbool ВыключательСдвигаДаты = false;
externbool ЗаписьФайла = true;
//--- глобальные переменныеint Tm,hr,shift,shiftbar,size,sizew,InpFileName,limit,end;
double H_buff[];
double L_buff[];
double C_buff[];
ulong pos[],arrw[];
double LastHigh,LastLow;
double OPEN,HIGH,LOW,CLOSE;
datetime pr,pr_1;
string T1,T2,T3,T4,file_buffer;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- привязка массива к индикаторному буферу с номером индексаSetIndexBuffer(0,H_buff);
SetIndexBuffer(1,L_buff);
SetIndexBuffer(2,C_buff);
//--- установка значений индикатора, которые не будут видимы на графике
SetIndexEmptyValue(0,EMPTY);
SetIndexEmptyValue(1,EMPTY);
SetIndexEmptyValue(2,EMPTY);
//---- устанавить новый тип, стиль, ширину и цвет для указанной линии индикатора
SetIndexStyle(0,DRAW_LINE,0,1);
SetIndexStyle(1,DRAW_LINE,0,1);
SetIndexStyle(2,DRAW_LINE,1,1);
//---- устанавить формат точности (количество знаков после десятичной точки
IndicatorDigits(Digits);
//---- Устанавливает порядковый номер бара от начала данных, с которого должна начинаться отрисовка указанной линии
SetIndexDrawBegin(0,2);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---- Функия расчета ключевых точек if (ВыключательСдвигаДаты==true)
shiftbar = iBarShift(Symbol(),PERIOD_D1, StrToTime(СдвигДаты), false);
else
shiftbar = 0;
hr=iBarShift(Symbol(),PERIOD_H1,iTime(Symbol(),PERIOD_D1,shiftbar)); // бервый бар дня для прорисовки уровнейif(hr>=9) shift= hr-8;
HIGH= iHigh(Symbol(),PERIOD_H1,shift);
LOW= iLow(Symbol(),PERIOD_H1,shift);
CLOSE= iClose(Symbol(),PERIOD_H1,shift);
//---- Функция проверки баров утренней сессииif(ВыключательСдвигаДаты==true)
{
limit=shift;
end=iBarShift(Symbol(),0,iTime(Symbol(),PERIOD_D1,shiftbar))-23;
}
else
{
limit=shift;
end=iBarShift(Symbol(),0,iTime(Symbol(),PERIOD_D1,shiftbar))-hr;
}
if(Period()==PERIOD_H1 && hr>=8 && (TimeDayOfWeek(Time[0])<6 && TimeDayOfWeek(Time[0])>0))
{
for(int u=limit; u>=end; u--)
{
if (High[u+1]>LastHigh) LastHigh=High[u+1];
if (Low[u+1]<LastLow) LastLow=Low[u+1];
pr = TimeDay(Time[u]);
pr_1 = TimeDay(Time[u+1]);
if (pr!=pr_1)
{
H_buff[u+1] = EMPTY;
L_buff[u+1] = EMPTY;
C_buff[u+1] = EMPTY;
}
//---- Функция прорисовки уровней на графике
H_buff[u]=HIGH;
L_buff[u]=LOW;
C_buff[u]=CLOSE;
}
}
///////////////////////////////////////////////////////////////////////// //----- Функция открытия и чтения значений из файла ResetLastError();
//--- откроем файлif(ЗаписьФайла==true)
InpFileName=FileOpen(Symbol()+" Z Point.txt",FILE_READ|FILE_TXT);
if(InpFileName!=INVALID_HANDLE)
{
GetStringPositions(InpFileName,pos); //--- получим позицию начала для каждой строки в файле
size=ArraySize(pos); //--- определим сколько всего строк в файле if(!size) //--- если в файле нет строк, то завершаем работуFileClose(InpFileName);
if(FileSeek(InpFileName,pos[ind],SEEK_SET)==true) //--- сдвинем позицию на начало этой строки
{
Print("Текст строки с номером ",ind," ",FileReadString(InpFileName)," size ",size); //--- прочитаем и распечатаем строку с номером ind
file_buffer=FileReadString(InpFileName); // чтение строки из файла
T1=StringSubstr(file_buffer,0,2+Digits); // Извлекаем первые 7 символов
T2=StringSubstr(file_buffer,7,2+Digits); // Извлекаем вторые 7 символов
T3=StringSubstr(file_buffer,14,2+Digits); // Извлекаем третьи 7 символов
T4=StringSubstr(file_buffer,21); // Извлекаем остаток символов
}
FileClose(InpFileName);
}
if(ЗаписьФайла==true) {
Comment("ЗАПИСЬ В ФАЙЛ: IND ",ind," SIZE ",size," T1: ",StrToDouble(T1)," ||| T2: ",StrToDouble(T2)," ||| T3: ",StrToDouble(T3)," ||| shift ",StrToInteger(T4));
if(StrToDouble(T1)!=HIGH && StrToDouble(T2)!=LOW && StrToDouble(T3)!=CLOSE && StrToInteger(T4)!=shift)
WRITEfile(); } elseComment("ЗАПИСЬ ВЫКЛЮЧЕНА !");
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+//| Функция определяет позиции начала для каждой из строк в файле и |//| помещает их в массив arr |//+------------------------------------------------------------------+void GetStringPositions(constint handle,ulong &arr[])
{
int j,def_size=127; //--- размер массива по умолчаниюArrayResize(arr,def_size); //--- выделим память для массиваif(!FileIsEnding(handle)) //--- если не конец файла, то есть хотя бы одна строка
{
arr[j]=FileTell(handle);
j+=1; //--- счетчик строк
}
elsereturn; // файл пуст, выходим//--- определим сдвиг в байтах в зависимости от кодировки//if(FileGetInteger(handle,FILE_IS_TEXT))while(!FileIsEnding(handle)) //--- в цикле перебираем строки до конца файла
{
FileReadString(handle); //--- читаем строкуif(!FileIsEnding(handle)) //--- проверка на конец файла
{
arr[j]=FileTell(handle)+1; //--- запомним позицию следующей строки
j+=1;
if(j==def_size) //--- увеличим размер массива, если он переполнен
{
def_size+=def_size+1;
ArrayResize(arr,def_size);
}
}
elsebreak; // конец файла, выходим
}
ArrayResize(arr,j); //--- установим истинный размер массива
}
//+------------------------------------------------------------------+void WRITEfile() // запись в файл и его создание если его нет
{
InpFileName=FileOpen(Symbol()+" Z Point.txt",FILE_WRITE|FILE_TXT);
if(InpFileName!=INVALID_HANDLE)
{
FileWrite(InpFileName,"Начало файловой записи.Проба");
while(!FileIsEnding(InpFileName)) //--- в цикле перебираем строки до конца файлаFileReadString(InpFileName); //--- читаем строкуFileSeek(InpFileName,0,SEEK_END); // конец файла, пишемFileWrite(InpFileName,DoubleToStr(HIGH,Digits),DoubleToStr(LOW,Digits),DoubleToStr(CLOSE,Digits),IntegerToString(shift,0));
FileFlush(InpFileName);
}
FileClose(InpFileName);
}
//+------------------------------------------------------------------+
Il y a un grand fichier avec des dates sous cette forme "20141231". Pour convertir la chaîne au formatdate, vous avez besoin des points"YYYY.MM.DD" entre l'année, le mois et le chiffre.
je viens d'expérimenter avec l'"archive des cotations" . en mettant à jour chaque graphique séparément, l'historique pour presque tous les graphiques a commencé à fonctionner correctement, sauf pour quelques paires exotiques, je les ai supprimées et mises à jour plusieurs fois - pas de nouvelles données pour le graphique. en général, on peut dire que le problème a été résolu
merci pour l'efficacité))))
Chers programmateurs....J'ai un problème... J'aicréé un EA.... il ouvre les trades normalement (dans le testeur) .... mais ne ferme que les trades d'achat.... il ne ferme que les trades de vente après avoir terminé le test.... voici un morceau de code.... pouvez-vous m'aider...
//---------------------------------------------------------------------------------------------------------
void CloseSell()
{
for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
{
if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES) == true)
{
if (OrderSymbol() == Symbol())
{
if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Green);
}
}
}
}
//+------------------------------------------------------------------+
void CloseBuy()
{
for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
{
if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES) == true)
{
if (OrderSymbol() == Symbol())
{
if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Green);
}
}
}
}
//+------------------------------------------------------------------+
void OpenSellOrder()
{
mlots = GetLots();
if (AutoSL) sl = CalcSL(OP_SELL);
else sl = ND(Bid - StopLoss*Point);
tp = ND(Bid - TakeProfit*Point);
ticket = OrderSendReliable(Symbol(), OP_SELL, mlots, Bid, Slippage, 0, 0, comment, Magic, 0, Red);
if(ticket > 0)
OrderModifyReliable(OrderTicket(), OrderOpenPrice(), sl, tp, 0);
}
//+------------------------------------------------------------------+
int OpenBuyOrder()
{
mlots = GetLots();
if (AutoSL) sl = CalcSL(OP_BUY);
else sl = ND(Bid - StopLoss*Point);
tp = ND(Ask + TakeProfit*Point);
ticket = OrderSendReliable(Symbol(), OP_BUY, mlots, Ask, Slippage, 0, 0, comment, Magic, 0, Blue);
if(ticket > 0)
OrderModifyReliable(OrderTicket(), OrderOpenPrice(), sl, tp, 0);
}
//+------------------------------------------------------------------+
void ModifyLoss()
{
for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
{
if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES) == true)
{
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
if (OrderType() == OP_BUY)
{
sl = ND(OrderOpenPrice() + LossPoints*Point);
if (OrderStopLoss() < sl && (Ask - OrderOpenPrice())/Point >= LossLimit)
{
if (sl != ND(OrderStopLoss()))
OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0);
}
}
else
if (OrderType() == OP_SELL)
{
sl = ND(OrderOpenPrice() - LossPoints*Point);
if (OrderStopLoss() > sl && (OrderOpenPrice()-Bid)/Point >= LossLimit)
{
if (sl != ND(OrderStopLoss()))
OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0);
}
}
}
}
}
//+------------------------------------------------------------------+
double CalcSL(int otype)
{
double sloss = 10000000;
if (otype == OP_BUY)
{
double min;
for (int i=1; i<=SLBars; i++)
{
min = iLow(NULL, 0, i);
if (min < sloss)
sloss = min;
}
sloss = ND(sloss - SLPips*Point);
if ((Ask-sloss)/Point < MinSL)
sloss = ND(Ask - MinSL*Point);
if ((Ask - sloss)/Point > MaxSL)
sloss = ND(Ask - MaxSL*Point);
else
sloss = ND(sloss - SLPips*Point);
return(sloss);
}
else
if (otype == OP_SELL)
{
double max;
sloss = 0;
for (i=1; i<=SLBars; i++)
{
max = iHigh(NULL, 0, i);
if (max > sloss)
sloss = max;
}
if ((sloss - Bid)/Point < MinSL)
sloss = ND(Bid + MinSL*Point);
if ((sloss - Bid)/Point > MaxSL)
sloss = ND(Bid + MaxSL*Point);
else
sloss = ND(sloss + SLPips*Point);
return(sloss);
}
return(0);
}
//+------------------------------------------------------------------+
double GetLots()
{
if (!UseMM) return(FixLot);
double clots;
clots = AccountBalance() / 10000.0 * LotsFor10000;
clots = MathMax(clots, MarketInfo(Symbol(), MODE_MINLOT));
clots = MathMin(clots, MarketInfo(Symbol(), MODE_MAXLOT));
clots = NormalizeDouble(clots, 2);
return (clots);
}
//+------------------------------------------------------------------+
int CountBuy()
{
int count = 0;
for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
{
if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
count++;
}
}
return (count);
}
//+------------------------------------------------------------------+
int CountSell()
{
int count = 0;
for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
{
if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
count++;
}
}
return (count);
}
//+------------------------------------------------------------------+
int CountTrades()
{
return(CountBuy() + CountSell());
}
//+------------------------------------------------------------------+
double ND(double value)
{
return (NormalizeDouble(value, Digits));
Ordre de présélection OrderSelect (Ticket_first_order, SELECT_BY_TICKET) ;
si(OrderOpenPrice()+10*Point==Ask)
OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,Green) ;
Je pense que c'est une branche de travail... oups, désolé.
Bonne nuit à tous ! !! Bonne année !
J'ai décidé de sauvegarder les données de la mémoire tampon dans un fichier. Il n'y a pas de problème pour créer un fichier et y écrire, mais il est difficile de le lire.
Voici un programme d'essai. Aidez-moi, s'il vous plaît. Le problème est que soit il y a une écriture supplémentaire dans le fichier, soit il ne peut pas être lu du fichier. Je veux juste lire une liste d'un fichier dans, par exemple, des tableaux... Si je suis trop paresseux pour écrire s'il vous plaît lien vers du matériel similaire, mais j'ai trouvé seulement tutoriel ... MAIS MIEUX VAUT UNE VARIANTE PRÊTE SUR LE SITE))) :
MERCI D'AVANCE EN TOUT CAS ! !!))
Hélas, ce n'est pas si facile avec l'ENREGISTREMENT dans le fichier!!!((((
Et il semblait... au contraire.
La lecture est réglée grâce aux exemples du tutoriel, mais l'ENREGISTREMENT dans un fichier nécessite un code plus complexe. En bref, je me suis déjà fait avoir... Je n'arrive pas à trouver comment déplacer l'enregistrement en synchronisation avec le fichier Read from.
J'ai corrigé le réglage des niveaux pour les barres de jour et pour l'historique (données initiales tamponnées).
LA QUESTION EST LA MÊME. S'IL VOUS PLAÎT, DONNEZ-MOI UN INDICE, SI C'EST TROP D'ÉCRITURE, SUR LA FAÇON D'ÉCRIRE LES DONNÉES DE LA MÉMOIRE TAMPON DANS UN FICHIER.
CODE MODIFIÉ DU PROGRAMME
TROUVÉ OÙ CHERCHER LES RÉPONSES À MES QUESTIONS... SUR LES OPÉRATIONS SUR LES FICHIERS))) :
DES SCRIPTS POUR LA SORTIE D'INFORMATIONS D'UN FICHIER VERS UN GRAPHIQUE.
HISTOIRE DES CODES MT4 GRATUITS IL EXISTE DES OPTIONS POUR TRANSFÉRER DES DONNÉES VERS UN FICHIER, AINSI QUE L'OPÉRATION INVERSE.
MERCI À TOUS, TOUT LE MONDE CIAO)))) :
Il y a un grand fichier avec des dates sous cette forme "20141231". Pour convertir la chaîne au formatdate, vous avez besoin des points"YYYY.MM.DD" entre l'année, le mois et le chiffre.
Comment cela peut-il être fait ?
Bonjour à tous, je veux que l'Expert Advisor trouve le plus haut ou le plus bas pour 100 barres, comment faire ?
Vous pouvez lire l'aide, tout y est, avec des exemples.