Ich habe gerade mit dem "Archiv von Zitaten" experimentiert . durch die Aktualisierung jedes Diagramm separat, begann die Geschichte für fast alle Charts richtig zu arbeiten, außer für ein paar exotische Paare, löschte ich und aktualisierte sie ein paar Mal - keine neuen Daten für das Diagramm. im Allgemeinen können wir sagen, dass das Problem gelöst ist
Liebe Programmierer....ich habe ein Problem... Ichhabe einen EA erstellt....er öffnet Trades normal (im Tester) .... schließt aber nur Kauftrades....er schließt nur Verkaufstrades nach Abschluss des Tests... hier ist ein Teil des Codes.... können Sie mir helfen...
Ich glaube, es ist ein funktionierender Zweig... ups, sorry.
Gute Nacht allerseits!!! Frohes neues Jahr!
Es wurde beschlossen, die Pufferdaten in einer Datei zu speichern. Es ist kein Problem, eine Datei zu erstellen und in sie zu schreiben, aber es ist schwierig, aus ihr zu lesen.
Hier ist ein Testprogramm. Bitte um Hilfe. Das Problem besteht darin, dass entweder zusätzliche Daten in die Datei geschrieben werden, oder dass sie nicht aus der Datei gelesen werden können. Ich möchte nur eine Liste aus einer Datei in z. B. Arrays lesen... Wenn ich zu faul bin zu schreiben, bitte Link zu ähnlichen Material, aber ich habe nur Tutorial gefunden ... ABER BESSER EINE FERTIGE VARIANTE AUF DER WEBSITE))):
TROTZDEM VIELEN DANK IM VORAUS!!!))
//+------------------------------------------------------------------+//| 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;
}
//+------------------------------------------------------------------+
Das Lesen ist dank der Tutorial-Beispiele kein Problem, aber das AUFZEICHNEN in eine Datei erfordert einen komplexeren Code. Kurz gesagt, ich bin bereits getäuscht worden... Ich kann nicht herausfinden, wie ich den Datensatz synchron mit der Datei Lesen aus verschieben kann.
Ich habe die Einstellung der Pegel für Tagesbalken und für die Historie (anfänglich gepufferte Daten) korrigiert.
DIE FRAGE IST DIESELBE. BITTE GEBEN SIE MIR EINEN TIPP, WIE ICH PUFFERDATEN IN EINE DATEI SCHREIBEN KANN, WENN ES ZU VIEL IST.
GEÄNDERTER CODE DES PROGRAMMS
//+------------------------------------------------------------------+//| 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);
}
//+------------------------------------------------------------------+
Es gibt eine große Datei mit Daten in dieser Form "20141231". Um die Zeichenkette in dasDatumsformat umzuwandeln,benötigen Sie die Punkte"JJJJ.MM.TT" zwischen dem Jahr, dem Monat und der Zahl.
Ich habe gerade mit dem "Archiv von Zitaten" experimentiert . durch die Aktualisierung jedes Diagramm separat, begann die Geschichte für fast alle Charts richtig zu arbeiten, außer für ein paar exotische Paare, löschte ich und aktualisierte sie ein paar Mal - keine neuen Daten für das Diagramm. im Allgemeinen können wir sagen, dass das Problem gelöst ist
danke für die Effizienz))))
Liebe Programmierer....ich habe ein Problem... Ichhabe einen EA erstellt....er öffnet Trades normal (im Tester) .... schließt aber nur Kauftrades....er schließt nur Verkaufstrades nach Abschluss des Tests... hier ist ein Teil des Codes.... können Sie mir helfen...
//---------------------------------------------------------------------------------------------------------
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));
Vorauswahl der Bestellung OrderSelect (Ticket_first_order, SELECT_BY_TICKET);
if(OrderOpenPrice()+10*Point==Ask)
OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,Green);
Ich glaube, es ist ein funktionierender Zweig... ups, sorry.
Gute Nacht allerseits!!! Frohes neues Jahr!
Es wurde beschlossen, die Pufferdaten in einer Datei zu speichern. Es ist kein Problem, eine Datei zu erstellen und in sie zu schreiben, aber es ist schwierig, aus ihr zu lesen.
Hier ist ein Testprogramm. Bitte um Hilfe. Das Problem besteht darin, dass entweder zusätzliche Daten in die Datei geschrieben werden, oder dass sie nicht aus der Datei gelesen werden können. Ich möchte nur eine Liste aus einer Datei in z. B. Arrays lesen... Wenn ich zu faul bin zu schreiben, bitte Link zu ähnlichen Material, aber ich habe nur Tutorial gefunden ... ABER BESSER EINE FERTIGE VARIANTE AUF DER WEBSITE))):
TROTZDEM VIELEN DANK IM VORAUS!!!))
Leider ist es nicht so einfach mit RECORDING in der Datei!!!(((
Und es schien ... im Gegenteil.
Das Lesen ist dank der Tutorial-Beispiele kein Problem, aber das AUFZEICHNEN in eine Datei erfordert einen komplexeren Code. Kurz gesagt, ich bin bereits getäuscht worden... Ich kann nicht herausfinden, wie ich den Datensatz synchron mit der Datei Lesen aus verschieben kann.
Ich habe die Einstellung der Pegel für Tagesbalken und für die Historie (anfänglich gepufferte Daten) korrigiert.
DIE FRAGE IST DIESELBE. BITTE GEBEN SIE MIR EINEN TIPP, WIE ICH PUFFERDATEN IN EINE DATEI SCHREIBEN KANN, WENN ES ZU VIEL IST.
GEÄNDERTER CODE DES PROGRAMMS
GEFUNDEN, WO ICH ANTWORTEN AUF MEINE FRAGEN... ÜBER DATEIOPERATIONEN SUCHEN KANN))):
SKRIPTE ZUR AUSGABE VON INFORMATIONEN AUS EINER DATEI IN EIN DIAGRAMM.
HISTORY OF FREE MT4 CODES GIBT ES OPTIONEN FÜR DIE ÜBERTRAGUNG VON DATEN IN EINE DATEI, SOWIE DIE UMGEKEHRTE OPERATION.
ICH DANKE IHNEN ALLEN, CIAO)))):
Es gibt eine große Datei mit Daten in dieser Form "20141231". Um die Zeichenkette in dasDatumsformat umzuwandeln,benötigen Sie die Punkte"JJJJ.MM.TT" zwischen dem Jahr, dem Monat und der Zahl.
Wie lässt sich das bewerkstelligen?
Hallo an alle, ich möchte die EA zu finden, die höchste hoch oder niedrigste niedrig in 100 Bars, beraten, wo zu lesen?
Sie können die Hilfe lesen, dort steht alles drin, mit Beispielen.