Как кодировать? - страница 160

 
increase:
Никогда не могу никому помочь, ребята, пожалуйста, ответьте .

При умеренной догадливости я бы предположил, что проблема в индикаторе или в вашем расширении к нему, а не в использовании iCustom. Возможно, было бы лучше назначить буферы 2 и 3 вместе с алертами? (Хотя я не смог понять, как/когда их нулевые значения индекса ([0]) будут назначены в любом случае).

 

Информация о ценовых данных

Мои выходы и входы основаны на сигналах, генерирующих условие на открытии следующего бара (вход и выход), должен ли я использовать цены открытия для индикаторов и скользящих средних? Я всегда использовал данные на конец дня для торговли акциями, поэтому, естественно, я тяготел именно к ним. Каково общее мнение?

 

Просто подумал

как установить трейлинг-стоп на минимальном уровне стопа пары, чтобы если уровень стопа 4 пункта или 25 пунктов, то sl срабатывал на этом уровне в зависимости от пары.

Я должен сказать, как вы используете спецификацию контракта для каждой пары.

Спасибо

Бено

 

Индикатор Sidus_Bago

Привет увеличение,

Я хотел бы узнать, можете ли вы помочь мне закодировать Sidus_Bago в качестве MTF индикатора? Я думаю, что этот индикатор тоже очень хорош.

Sidus_Bago находится здесь:

Индикатор подтверждения Sidus System?

Большое спасибо.

 

Может ли кто-нибудь помочь мне с этим советником?

Привет всем,

Я попробовал свой первый советник, но он не компилируется; я получаю ошибку "'\end of program' - unbalanced left parenthesis" и я просмотрел его несколько раз, но не могу найти проблему. Не беспокойтесь о логике торговой стратегии (если вы не заинтересованы), я буду работать над этим, когда она скомпилируется и запустится...

Очевидно, у меня нет разрешения на прикрепление файлов, так что извините за вырезание и вставку.

Спасибо,

Роб,

Перт, Аус

//---------------

//+------------------------------------------------------------------+

//| Rob_Ea.mq4 |

//| Rob Cousins |

//| |

//+------------------------------------------------------------------+

#property copyright "Rob Cousins"

#property link ""

#define MAGICMA 20090216

//---- входные параметры

extern double Lots;

extern int Short_MA=5;

extern int Long_MA=15;

extern double Stoch_Upper=70.0;

extern double Stoch_Lower=30.0;

extern double RSI_Upper=80.0;

extern double RSI_Lower=20.0;

//+------------------------------------------------------------------+

//| функция инициализации эксперта |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| функция деинициализации эксперта | |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

string Current_Indication()

{

// Переменные скользящей средней

double MA_Short;

double MA_Long;

string Current_MA_Indicator;

string Previous_MA_Indicator;

string MA_Indicator;

// Стохастические переменные

string Current_Stoch_Indicator;

string Previous_Stoch_Indicator;

string Stoch_Indicator;

// Переменные RSI

string Current_RSI_Indicator;

string Previous_RSI_Indicator;

string RSI_Indicator;

// --------------------------------------

// сначала получаем MAs и проверяем наличие MA Cross

// --------------------------------------

MA_Short=iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,0);

MA_Long=iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,0);

if (MA_Short>MA_Long) Current_MA_Indicator="BUY";

if (MA_Short<MA_Long) Current_MA_Indicator="SELL";

// установите предыдущее и текущее значение, используя сдвинутую MA (последняя "1" в опциях)

if (iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,1)>iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,1)) Previous_MA_Indicator="BUY";

if (iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,1)<iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,1)) Previous_MA_Indicator="SELL";

if ((Current_MA_Indicator=="BUY") && (Previous_MA_Indicator=="BUY")) MA_Indicator="BUY";

if ((Current_MA_Indicator=="SELL") && (Previous_MA_Indicator=="SELL")) MA_Indicator="SELL";

// ----------------------------

// Проверка стохастического индикатора

// ----------------------------

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,0)>Stoch_Upper) Current_Stoch_Indicator="BUY";

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,0)<Stoch_Lower) Current_Stoch_Indicator="SELL";

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,1)>Stoch_Upper) Previous_Stoch_Indicator="BUY";

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,1)<Stoch_Lower) Previous_Stoch_Indicator="SELL";

if ((Current_Stoch_Indicator=="BUY") && (Previous_Stoch_Indicator=="BUY")) Stoch_Indicator="BUY";

if ((Current_Stoch_Indicator=="SELL") && (Previous_Stoch_Indicator=="SELL")) Stoch_Indicator="SELL";

// ----------------------------

// Проверка индикатора RSI

// ----------------------------

if(iRSI(NULL,0,3,PRICE_CLOSE,0)>RSI_Upper) Current_RSI_Indicator="BUY";

if(iRSI(NULL,0,3,PRICE_CLOSE,0)<RSI_Lower) Current_RSI_Indicator="SELL";

if(iRSI(NULL,0,3,PRICE_CLOSE,1)>RSI_Upper) Previous_RSI_Indicator="BUY";

if(iRSI(NULL,0,3,PRICE_CLOSE,1)<RSI_Lower) Previous_RSI_Indicator="SELL";

if ((Current_RSI_Indicator=="BUY") && (Previous_RSI_Indicator=="BUY")) RSI_Indicator="BUY";

if ((Current_RSI_Indicator=="SELL") && (Previous_RSI_Indicator=="SELL")) RSI_Indicator="ПРОДАВАТЬ";

//----------------------------------------

// Определите, находитесь ли вы в ситуации покупки или продажи

//----------------------------------------

if((MA_Indicator=="BUY") && (Stoch_Indicator=="BUY") && (RSI_Indicator=="BUY") return("BUY");

if((MA_Indicator=="SELL") && (Stoch_Indicator=="SELL") && (RSI_Indicator=="SELL") return("SELL");

}

//+------------------------------------------------------------------+

//| Вычисление открытых позиций |

//+------------------------------------------------------------------+

string Current_Trade(string symbol)

{

//----

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)

{

return("NONE");

break;

}

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

if(OrderType()==OP_BUY) return("BUY");

if(OrderType()==OP_SELL) return("SELL");

}

}

}

//----------------------------------------------------------------------

// Если сигнал изменил направление, первое, что нужно сделать, это закрыть

// текущую открытую сделку перед открытием другой.

//-----------------------------------------------------------------------

void CloseTrade(string symbol)

{

// double ma;

//---- переходим к торговле только на первых тиках нового бара

// if(Volume[0]>1) return;

//----

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; // нет открытых сделок

if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;

//---- проверка типа ордера

// оставляем оба варианта на тот случай, если я захочу сделать это по-другому

//например, другой цвет, или что-то еще. В остальном обе команды одинаковы

// и вам понадобится только одна. Кроме разных цен, я полагаю... Вот!

if(OrderType()==OP_BUY)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,White);

break;

}

if(OrderType()==OP_SELL)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,White);

break;

}

}

//----

}

//-----------------------------------------------------------

// Открыть позицию, если это то, о чем говорят чайные листья.

//------------------------------------------------------------

void OpenTrade(string symbol,string Type)

{

int res;

//---- условия покупки

if(Type=="BUY") OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "ROB EA TEST",MAGICMA,0,Blue);

//---- условия продажи

if(Type=="SELL") OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "ROB EA TEST",MAGICMA,0,Red);

}

//+------------------------------------------------------------------+

//| функция запуска эксперта |

//+------------------------------------------------------------------+

void start()

{

//----

//---- вычисляет открытые ордера по текущему символу

//--- Если нет открытых сделок, то просто откройте одну...

if(Current_Trade(Symbol())=="NONE") OpenTrade(Symbol(),Current_Indication());

// Но если уже есть открытая сделка, нам нужно сначала закрыть ее, прежде чем открывать новую.

if ((Current_Trade(Symbol())=="BUY") && (Current_Indication()=="SELL")))

{

CloseTrade(Symbol());

OpenTrade(Symbol(),Current_Indication());

}

if ((Current_Trade(Symbol())=="SELL") && (Current_Indication()=="BUY")))

{

CloseTrade(Symbol());

OpenTrade(Symbol(),Current_Indication());

}

return;

}

 

вот так.........................................

Файлы:
robtestea.mq4  7 kb
 

Хорошо, это было быстро! Большое спасибо. В чем была проблема?

Роб.

 

Проблема с записью файла

Я программирую ea, которая использует файлы для хранения результатов торговли (убыток, выигрыш) со значениями индикаторов. Когда советник входит в сделку, я записываю значения индикаторов и время, когда была совершена сделка, в файл "sellOpenInd.tab":

После этой операции файл включает в себя:

CCISDivPresent 22 69 0.000024 0.000046 0.000045 -0.000015 2002.05.07 13:00

CCISDivPresent 66 85 0.000064 0.000032 0.000037 -0.000033 2002.05.15 07:00

CCISDivPresent 77 90 0.000041 -0.000029 0.000008 -0.000020 2002.06.03 08:00

etc...

In next stage i open this file and look into history for dates of opened orders then i check results of this trades and write into file "sellResults.tab"+indicators values writen in previous stage(above) .And here problem occures, only one same trade is recorded:

Rule7 Rule6 Rule5 Rule4 Rule3 Rule2 Rule1 TradeOutcome

-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win

-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win

-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win

etc..

Here is my code(i know is not looking nice ):

int dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");

if(dates>0){

for(k=0;k<=10;k++){ //i use for loop instead of while(!FileIsEnding(dates) ) because ea enters in infinite loop for unknown reasons

dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");

FileSeek(dates,filepos,SEEK_SET);

while (FileIsLineEnding(dates)==FALSE){filestr=FileReadString(dates)+"\t"+filestr;filepos=filepos+FileTell(dates);}

decodeFile(filestr);//calling function which decodes readed string line, then writing results to global varaiables filter7 ,filter6 etc.

Comment(filterS7);

for (i =OrdersHistoryTotal()-1; i>=0; i--) {

OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);

if (OrderSymbol() == Currencies) {

if((OrderMagicNumber()==16381||OrderMagicNumber()==16383)&&OrderCloseTime()!=0){

historyDateTime=TimeToStr(OrderOpenTime());

OrderP=OrderProfit();

if(OrderP>0)orderresult="win";

if(OrderP<=0)orderresult="loss";

if(filterS7==historyDateTime) {

testFline=filterS6+"\t"+filterS5+"\t"+filterS4+"\t"+filterS3+"\t"+filterS2+"\t"+filterS1+"\t"+filterS0+"\t"+orderresult;

results=FileOpen("sellResults.tab", FILE_READ|FILE_WRITE,"\t");

FileSeek(results,0,SEEK_END);

FileWrite(results,testFline);

testFline="";

filestr="";

}

}

}

}

if(!FileIsEnding(dates)){FileClose(dates);FileClose(results);filepos=0;break;

}

}

}

 

Каждый шаг в вашем цикле вы открываете файл "sellOpenInd.tab" снова и снова.

Попробуйте это:

int dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");

if(dates>0){

for(k=0;k<=10;k++){ //i use for loop instead of while(!FileIsEnding(dates) ) because ea enters in infinite loop for unknown reasons

FileSeek(dates,filepos,SEEK_SET);

while (FileIsLineEnding(dates)==FALSE){filestr=FileReadString(dates)+"\t"+filestr;filepos=filepos+FileTell(dates);}

decodeFile(filestr);//calling function which decodes readed string line, then writing results to global varaiables filter7 ,filter6 etc.

Comment(filterS7);

for (i =OrdersHistoryTotal()-1; i>=0; i--) {

OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);

if (OrderSymbol() == Currencies) {

if((OrderMagicNumber()==16381||OrderMagicNumber()==16383)&&OrderCloseTime()!=0){

historyDateTime=TimeToStr(OrderOpenTime());

OrderP=OrderProfit();

if(OrderP>0)orderresult="win";

if(OrderP<=0)orderresult="loss";

if(filterS7==historyDateTime) {

testFline=filterS6+"\t"+filterS5+"\t"+filterS4+"\t"+filterS3+"\t"+filterS2+"\t"+filterS1+"\t"+filterS0+"\t"+orderresult;

results=FileOpen("sellResults.tab", FILE_READ|FILE_WRITE,"\t");

FileSeek(results,0,SEEK_END);

FileWrite(results,testFline);

testFline="";

filestr="";

}

}

}

}

if(!FileIsEnding(dates)){FileClose(dates);FileClose(results);filepos=0;break;

}

}

}
 

Привет Roger09 Я пробовал это раньше, но это не помогает. Похоже, что указатель не перемещается в следующую строку, но я не знаю почему.

В любом случае, спасибо за ответ.