string MyFileName="History_Of_Trades.csv"; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ voidOnStart() { //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн //создаем файл и записываем в него заглавную строку //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн //записываем в файл данные по закрытым позициям //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
for (int n=1; n<=OrdersTotal(); n++) { if (OrderSelect(n-1,SELECT_BY_POS,MODE_HISTORY)) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
inputbool UseDateFrom = false; // Указывать дату начала inputdatetime DateFrom=0; // Дата начала inputbool UseDateTo=false; // Указывать дату окончания inputdatetime DateTo=0; // Дата окончания
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ voidOnStart(){
もちろん、ゼロバーでの再計算が原因であることは理解しているのですが、どう解決すればいいのか判断がつきません。
今03は不具合あり。
ここがそうです。
y=Neg;
Pos=positive;
Neg=negative;
単純な変数にデータを格納する - これは、インジケータが計算される 最初の時にのみ動作します。すると、ゼロバーでは、前のバーのデータを含むはずの変数に、現在のバーのデータが、前のティックのデータとして含まれることになります。
今03は不具合あり。
ここがそうです。
y=Neg;
Pos=positive;
Neg=negative;
単純な変数にデータを格納する - これは、インジケータが計算される 最初の時にのみ動作します。すると、ゼロバーでは、前のバーのデータを持つべき変数が、前のティックの現在のバーのデータを持つことになります。
もちろん、私はそれを得た、私はどのようにグラフィカルバッファなしで問題を解決するために疑問に思う - リソースを保存する - メモリ?
この 指標を瞑想してください。静的変数を多く持っています。
static int cDir=0;
static int pDir=0;
バッファの代わりに作られる。
IndicatorCounted()=0の時はLastTimeをゼロにする(他は必要ないが望ましい)。
そして、ループの最初で、値を移動させる。
{
LastTime=Time[i];
pDir=cDir;
}
else
{
cDir=pDir;
}
c "で始まる変数は現在の値、"p "で始まる変数は以前の値です。
string MyFileName="History_Of_Trades.csv";
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
//создаем файл и записываем в него заглавную строку
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
int file_handle=FileOpen(MyFileName, FILE_WRITE, " ");
string mytext="Магик;Номер ордера;Время открытия;Время закрытия;Объем;Символ;Цена открытия;Цена закрытия;Своп;Прибыль";
FileWrite(file_handle, mytext);
FileClose(file_handle);
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
//записываем в файл данные по закрытым позициям
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
for (int n=1; n<=OrdersTotal(); n++) {
if (OrderSelect(n-1,SELECT_BY_POS,MODE_HISTORY)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
mytext=OrderMagicNumber()+";"
+OrderTicket()+";"
+TimeToString(OrderOpenTime(),TIME_DATE|TIME_MINUTES)+";"
+TimeToString(OrderCloseTime(),TIME_DATE|TIME_MINUTES)+";"
+DoubleToString(OrderLots(),2)+";"
+Symbol()+";"
+DoubleToString(OrderOpenPrice(),Digits)+";"
+DoubleToString(OrderClosePrice(),Digits)+";"
+DoubleToString(OrderSwap(),2)+";"
+DoubleToString(OrderProfit(),2);
file_handle=FileOpen(MyFileName, FILE_READ|FILE_WRITE, " ");
FileSeek(file_handle, 0, SEEK_END);
FileWrite(file_handle, mytext);
FileClose(file_handle);
}}}}
こんにちは。コードについてご教授ください。利用可能な取引履歴をファイルに書き出すスクリプトを作成しようとしています。スクリプトを実行した結果、ファイルにはタイトル行(コード内参照)と履歴から最も古い取引のデータの2行しかないためです。何が問題なのか理解できない。自分ではどうにも解析できないので、助けを求めているところです。
ドミトリーは良い 記事を書いてくれた。
私が必要とするスクリプトがあるのですが、それはまだ私のために動作しません、それはmql5を持っており、私はmql4を持っています、コンパイラは多くのエラーを生成します、どうやらそれは多くの未知の単語を知っているようです :(
こんにちは。アラート後にインジケーターからapi.binaryteam.ruに送信 する必要があるのですが。アラート後に http://api.binaryteam.ru/?request=signal&key=12345472300af900f431234561234567&formname=risefall&type_account=demo&symbol=frxUSDCHF&duration=5m&amount=3&bet=CALL&source=metatrader のような行を api.binaryteam.ru に送信するには、indicator.mq4 ファイルにどのような行を追加すればよいですか。
WebRequest で http://binaryteam.ru/addons/#api http://binaryteam.ru/files/mt4example_1.zip に送信する例があります。indicator.mq4 ファイルに以下の行を追加 した場合。
extern double bet=1;
extern int expiration=1;
extern string key = "12345472300af900f431234561234567" ;
extern string type_account = "demo";
extern bool Flag = false;
extern string bettype;
.....
int start() {
....
условие покупки {
.....
Alert("алерт индюка - BUY!!!");
bettype = "CALL";
Print("направление ставки: ",bettype);
Flag = true;
Print(BinaryTeam());
}
условие продажи {
.....
Alert(""алерт индюка - SELL!!!");
bettype = "PUT";
Print("направление ставки: ",bettype);
Flag = true;
Print(BinaryTeam());
}
}
bool BinaryTeam()
{
char post[],result[];
int res;
string headers;
//--- для работы с сервером необходимо добавить URL
//--- в список разрешенных URL (Главное меню->Сервис->Настройки, вкладка "Советники"):
string formname = "risefall";
string symbol = "frx" + Symbol();
string duration = IntegerToString(expiration) + "m";
string amount = DoubleToString(bet);
if(Flag==false)
{
Print("не задано направление торговли");
return(false);
}
//--- пример: http://api.binaryteam.ru/?request=signal&key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&formname=risefall&type_account=demo&symbol=frxUSDCHF&duration=5m&amount=3&bet=CALL&source=metatrader
//--- собираем строку для отправки
string send = "?request=signal" +
"&source=metatrader" +
"&type_account=" + type_account +
"&bet=" + bettype +
"&formname=" + formname +
"&date_start=now" +
"&symbol=" + symbol +
"&duration=" + duration +
"&barrier=0" +
"&amount=" + amount +
"&key=" + key;
Print(send);
ResetLastError();
int timeout=5000;
res = WebRequest("GET",url+send,NULL,NULL,timeout,post,0,result,headers);
if(res==-1)
{
Print("Ошибка в WebRequest. Код ошибки =",GetLastError());
MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
}
else
{
Print(CharArrayToString(result));
return(true);
}
Print("Непредвиденная ситуация");
return(false);
}
writes 2016.11.16 13:50:01.783 WebRequestでエラー発生。エラーコード=4060。
WebRequest 関数を使わずにリクエストを渡す方法 WebRequest に類似した他の関数はありますか?
具体的にはどのような脚本なのでしょうか。見てみましょう。
その記事の付録では、sHistoryExport.mq5と呼ばれています。私のコンパイラは、名前が "HistoryDeal..." で始まる関数と "DEAL_..." で始まる識別子を受け付けない。以下はそのコードです。
#property link "https://www.mql5.com"
#property version "1.00"
#property script_show_inputs
input bool UseDateFrom = false; // Указывать дату начала
input datetime DateFrom=0; // Дата начала
input bool UseDateTo=false; // Указывать дату окончания
input datetime DateTo=0; // Дата окончания
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart(){
datetime from,to;
if(UseDateFrom){
from=DateFrom;
}
else{
from=0;
}
if(UseDateTo){
to=DateTo;
}
else{
to=TimeCurrent();
}
if(!HistorySelect(from,to)){
Alert("Ошибка выделение истории");
return;
}
string FileName="history.csv";
int h=FileOpen(FileName,FILE_WRITE|FILE_ANSI|FILE_CSV,";");
if(h==INVALID_HANDLE){
Alert("Ошибка открытия файла");
return;
}
// первая строка, что бы знать, где что находится
FileWrite(h,"Time","Deal","Order","Symbol","Type","Direction","Volume","Price","Comission","Swap","Profit","Comment");
// по всем сделкам
for(int i=0;i<HistoryDealsTotal();i++){
ulong ticket=HistoryDealGetTicket(i);
if(ticket!=0){
long type=HistoryDealGetInteger(ticket,DEAL_TYPE);
if(type==DEAL_TYPE_BUY || type==DEAL_TYPE_SELL){
long entry=HistoryDealGetInteger(ticket,DEAL_ENTRY);
FileWrite(h,(datetime)HistoryDealGetInteger(ticket,DEAL_TIME),
ticket,
HistoryDealGetInteger(ticket,DEAL_ORDER),
HistoryDealGetString(ticket,DEAL_SYMBOL),
(type==DEAL_TYPE_BUY?"buy":"sell"),
(entry==DEAL_ENTRY_IN?"in":(entry==DEAL_ENTRY_OUT?"out":"in/out")),
DoubleToString(HistoryDealGetDouble(ticket,DEAL_VOLUME),2),
HistoryDealGetDouble(ticket,DEAL_PRICE),
DoubleToString(HistoryDealGetDouble(ticket,DEAL_COMMISSION),2),
DoubleToString(HistoryDealGetDouble(ticket,DEAL_SWAP),2),
DoubleToString(HistoryDealGetDouble(ticket,DEAL_PROFIT),2),
HistoryDealGetString(ticket,DEAL_COMMENT)
);
}
}
else{
Alert("Ошибка выделения сделки, повторите попытку");
FileClose(h);
return;
}
}
FileClose(h);
Alert("Сохранение выполнено, см. файл "+FileName);
}
//+------------------------------------------------------------------+