Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Никогда не могу никому помочь, ребята, пожалуйста, ответьте .
При умеренной догадливости я бы предположил, что проблема в индикаторе или в вашем расширении к нему, а не в использовании 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;
}
вот так.........................................
Хорошо, это было быстро! Большое спасибо. В чем была проблема?
Роб.
Проблема с записью файла
Я программирую 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" снова и снова.
Попробуйте это:
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 Я пробовал это раньше, но это не помогает. Похоже, что указатель не перемещается в следующую строку, но я не знаю почему.
В любом случае, спасибо за ответ.